Problem mit Funktion

BlackPsycho

Mitglied
Hallo ich möchte gerne die ImageSearch funktion benutzen aber sie gibt nur char zurück mit trennungszeichen |.

ich bräuchte das die funktion aber ein int array zurückgibt^^

könnte mir da wer helfen? ich hab schon alles mögliche was ich gefunden hab probiert bekomm es einfach ned hin.

ich häng das vs2010 projekt an da is der ganze source code bei.

in der util.cpp und util.h befindet sich die funktion.

danke für die hilfe
 

Anhänge

  • bla.rar
    9,9 MB · Aufrufe: 18
Zuletzt bearbeitet:
Hi

Aus einem char-Array ca kannst du ganz einfach ein int-Array ia machen, und zwar so:
C++:
ia = (int *)ca;

Im Ernst: Was soll denn da drinnen sein, in diesem int-Array?
Irgendwie willst du ja den Sinn ändern.
Und wenn du uns schon über 1000 Codezeilen einfach so herklatscht kannst du doch wenigstens sagen, was am Schluss daraus werden soll.
 
Die funktion gibt die koordinaten des gefundenen bildes und die width und height zurück.
ich möchte ein übersetzungsprogramm schreiben das koreanische buttons und ui elemente übersetzt.

sorry das ich euch so nen haufen code hingeklatscht hab aber ich wusste ned was ihr alles davon braucht.

ich hab mich oben vielleicht schlecht ausgedrückt, die werte werden in einen char* ausgegeben in form von xx|xx|xx|xx

ich hab es jetz geteilt und er gibt mir die werte untereinander aus aber eben auch als char* blos ich hätte diese gerne in einem int array damit ich einzeln auf sie zugreifen kann und damit rechnen ect.

wenn ich jetzt deinen vorschlag verwende bekomm ich die speicheradresse und die nützt mir leider nicht viel, aber danke für die hilfe xD.

Ich hab auch schon probiert die funktion so umzubauen das sie statt char* int zurück gibt aber dann meckert der compiler beim "return 0" rum.

hier is ein snippet was ich momentan da stehn hab:

Code:
void _tmain()
{
	int z;
	HBITMAP hbmp = LoadPicture("c:\\pic.bmp",0,0,z,0,0);
	char *answer="";
	answer = ImageSearch(0,0,1280,1024,"C:\\pic.bmp");

	int *cToi;
	GetCursorPos(&pt);

	char *blubb[sizeof(strtok(answer, "|"))];
	if(sizeof(blubb) > 0)
	{
		blubb[0] = strtok(answer, "|"); // Splits spaces between words in str
		printf ("%s\n",blubb[0]); // Writes "this"
		for(int i = 1; i < sizeof(strtok(answer, "|")); i++)
		{
			blubb[i] = strtok (NULL, "|");
			printf ("%s\n",blubb[i]); // Writes "is"
			
		}
	}
	
	cToi = (int *)blubb;

	cout << "img: "<<cToi<<"\n";
	cout << "mouseX: "<<pt.x<<" mouseY: "<<pt.y<<"\n";
	getchar();
	return;
	
}

gruss
 
Zuletzt bearbeitet:
Mein "Vorschlag" vorher war nicht wirklich ernst gemeint.
Aber inzwischen hab ich verstanden, was du vorhast.

C++:
int *umspeichern(char *x, int *anz)
{
    int *ret;
    int i, j;
    j = strlen(x); *anz = 0;
    for (i = 0; i < j; i++)
    {
        if (x[i] == '|') *anz++;
    }
    if (j > 0) *anz++;
    ret = (int *) malloc(sizeof(int) * (*anz));
    if (ret == NULL)return NULL;
    j = 0;
    for (i = 0; i < *anz; i++)
    {
        ret[i] = 0;
        while (x[j] != '|')
        {
             ret[i] = ret[i] * 10 + (x[j] - '0');
             j++;
        }
        j++;
    }
    return ret;
}
Ungetestet.

Der erste Parameter ist der String.
Der zweite Parameter bruahct die Adresse (&...) von einem int, in dem am Schluss die Anzahl der ints im Array steht. Da muss also am Anfang noch nichts drin sein.
Der Returnwert ist das Array, oder im Fehlerfall NULL.

Danach das free(...) nicht vergessen.

Gruß
 
Zuletzt bearbeitet:
sorry wenn ich mich dumm anstelle kannst du mir vll bitte ein bsp. liefern bei mir läuft das immer auf nen crash raus :(.

ich hab das so gemacht:

Code:
int* cToi;

umspeichern(answer, cToi);
	
cout << "img: "<<cToi<<"\n";

free(cToi);

und es folgt gleich ein crash wenn ich das programm starte :/

danke^^
 
Zuletzt bearbeitet:
C++:
int* array;
int anz;

array = umspeichern(answer, &anz);
    
//array hat die Werte, anz die Anzahl der Werte
 
free(array);
 
danke, aber das selbe in grün.

es taucht kurz ne zahl "-858993460" auf dann gibts nen crash :(.
ich hab keine ahnung was ich falsch machen könnte.
hab dein beispiel sogar so kopiert und ich crashe trotzdem.

jetz bringt mein compile diese meldung: "warning C4715: "umspeichern": Nicht alle Steuerelementpfade geben einen Wert zurück."

bin langsam mitn latein am ende :(
 
Zuletzt bearbeitet:
Hehe, da hab ich doch glatt das letzte Return vergessen :D
Hab die Funktion oben geändert, kopier sie nochmal
 
Zurück