Hi,
meine C++ - Anwendung schickt per WM_COPYDATA einen String an eine Delphi Applikation.
Leider funktioniert das nicht ganz.
Die relevanten Codeausschnitte:
Delphi:
Delphi-Quellcode:
type
TMyRecord = packed record
b: Boolean;
s: string[255];
end;
PMyRecord = ^TMyRecord;
procedure TLoggerForm.WMCopydata(var msg: TWMCopyData);
var
MyRecord: PMyRecord;
b: Boolean;
s: String;
begin
b := PMyRecord(msg.CopyDataStruct.lpData)^.b;
s := PMyRecord(msg.CopyDataStruct.lpData)^.s;
memo1.Lines.Add(s);
// Daten auswerten/kopieren
msg.Result := 1; // erhalt bestätigen
end;
C++:
Code:
// In einer Klasse:
static void add(char *msg)
{
HWND logwindow = FindWindow("TLoggerForm", "LoggerForm");
if (logwindow == NULL) MessageBox(0, "mol", "mol", 0);
COPYDATASTRUCT MyCDS;
MYREC MyRec;
StringCbCopy( MyRec.string, sizeof(MyRec.string), msg );
MyCDS.dwData = NULL; // function identifier
MyCDS.cbData = sizeof( MyRec ); // size of data
MyCDS.lpData = &MyRec; // data structure
SendMessage( logwindow,
WM_COPYDATA,
(WPARAM)(HWND)NULL,
(LPARAM) (LPVOID) &MyCDS );
}
Wenn das C++-Proggie "Ein String" schickt, kommt "n String" an.
Wenn es " EinString EinString EinString EinString" sendet, kommt "EinString EinString EinString Ei" an.
Ich glaube, dass es an der Umwandlung zwischen Delphi-Strings und nullterminierten Strings liegt. Aber müsste das Delphi nicht automatisch machen?
mfg. Tubos