Bei WM_COPYDATA ist zu beachten, dass du die übergebenen Daten sofort bei Erhalt der Message in ein anderen Speicher kopierst.
Die
MSDN sagt dazu:
The receiving application should consider the data read-only. The lParam parameter is valid only during the processing of the message. The receiving application should not free the memory referenced by lParam. If the receiving application must access the data after SendMessage returns, it must copy the data into a local buffer.
Du solltest zusätzlich auch noch den Returnwert von SendMessage auswerten:
Delphi-Quellcode:
if not SendMessage(WindowHandle, WM_COPYDATA, AHandle, Integer(@cds)) then
begin
OutputDebugString('WM_COPYDATA failed!');
end;
Dazu muss auch deine Anwendung bei Erhalt der Message den Resultwert setzen.
Delphi-Quellcode:
procedure TForm1.WMCopydata(var Message: TWMCopyData);
begin
// Daten auswerten/kopieren
Message.Result := 1; // erhalt bestätigen
end;