Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: WM_COPYDATA von DLL zu Programm im Hintergrund / Handle?

  Alt 7. Dez 2004, 10:09
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;
Andreas
  Mit Zitat antworten Zitat