Kennt ihr diese Fehler vom Typ "das kanns ja gar nicht geben?"
Ich habe 2 Fenster, wo eines Daten an das Andere schicken soll.
Für einen ersten Test ganz einfach
Fenster 1:
Fenster 2:
Alles prima, was immer in tosend steht kommt prima in meiner MessageBox an und auch der Absender bekommt die Bestätigung korrekt zurück.
Also statt "Test" jetzt mal echte Daten senden, die hat mein erstes Fenster in einem std::string, den muss ich also kopieren, ganz einfach mit std::copy (dachte ich)
Fenster 1:
Und dann verstehe ich nur noch Bahnhof.
Er sendet immer noch brav den Inhalt von tosend,
aber ausserdem kommen noch zusätzlich ein paar Zeichen Müll an, als ob die \0 hinten im string fehlt oder der string länger geworden ist.
Ich habe mit einem Dutzend MessageBox alles überprüft, aber ich finde den Fehler nicht.
Wenn ich mir vorm senden den Inhalt von tosend ausgeben lasse stimmt alles, auch sizeof(tosend) stimmt, trotzdem geht auf dem Weg zum anderen Fenster irgendwo die \0 verloren, oder sonstwas schief.
Bin ich blind oder doof, oder beides?
Ich habe 2 Fenster, wo eines Daten an das Andere schicken soll.
Für einen ersten Test ganz einfach
Fenster 1:
Code:
COPYDATASTRUCT cd;
char tosend[] = "Test";
cd.dwData = 0;
cd.cbData = sizeof(tosend);
cd.lpData = &tosend;
SendMessage(FindWindow("My2ndWindow",NULL), WM_COPYDATA, (WPARAM)hwnd, (LPARAM)&cd);
Fenster 2:
Code:
case WM_COPYDATA:
{
PCOPYDATASTRUCT cd = (PCOPYDATASTRUCT) lParam;
char * received = (LPSTR)cd->lpData;
MessageBox(NULL,received,"receiving",MB_OK);
return 0;
}
break;
Alles prima, was immer in tosend steht kommt prima in meiner MessageBox an und auch der Absender bekommt die Bestätigung korrekt zurück.
Also statt "Test" jetzt mal echte Daten senden, die hat mein erstes Fenster in einem std::string, den muss ich also kopieren, ganz einfach mit std::copy (dachte ich)
Fenster 1:
Code:
TempString = "Irgendwas";
COPYDATASTRUCT cd;
char tosend[TempString.length()];
std::copy(TempString.begin(),TempString.end(),tosend);
tosend[TempString.length()] = '\0';
cd.dwData = 0;
cd.cbData = sizeof(tosend);
cd.lpData = &tosend;
SendMessage(FindWindow("My2ndWindow",NULL), WM_COPYDATA, (WPARAM)hwnd, (LPARAM)&cd);
Und dann verstehe ich nur noch Bahnhof.
Er sendet immer noch brav den Inhalt von tosend,
aber ausserdem kommen noch zusätzlich ein paar Zeichen Müll an, als ob die \0 hinten im string fehlt oder der string länger geworden ist.
Ich habe mit einem Dutzend MessageBox alles überprüft, aber ich finde den Fehler nicht.
Wenn ich mir vorm senden den Inhalt von tosend ausgeben lasse stimmt alles, auch sizeof(tosend) stimmt, trotzdem geht auf dem Weg zum anderen Fenster irgendwo die \0 verloren, oder sonstwas schief.
Bin ich blind oder doof, oder beides?