Hallo zusammen,
Ich verwende PostMessage, um eine Instanz einer Klasse (TMyData) zu senden, die variable Zeichenfolgen enthält. Wenn PostMessages fehlschlägt oder die gesendete Instanz vom Message-Handler empfangen wird, rufe ich auch den Destruktor auf.
Zu Erläuterung ein Ausschnitt aus dem Code:
Delphi-Quellcode:
// Data to send
TMyData=class
Data1: string;
Data2: string;
Data3: string;
end;
// send
procedure TTestClass1.PostTestData(
AData1: string;
AData2: string;
AData3: string);
var
test_data: TMyData;
begin
test_data:= TMyData.Create;
test_data.Data1:= AData1;
test_data.Data2:= AData2;
test_data.Data3:= AData3;
if not PostMessage(my_handle,WM_MY_MESSAGE,0,LPARAM(test_data)) then
test_data.Free;
end;
// receive
procedure TTestClass2.Message_WM_MY_MESSAGE(var Msg: TMessage);
var
test_data: TMyData;
begin
test_data := TMyData(Msg.LParam); // is this also compatible with 64 Bit?
try
// Do some work
finally
test_data.Free;
end;
end;
Ich habe System.ReportMemoryLeaksOnShutdown := true gesetzt, um Speicherlecks zu erkennen.
Obwohl ich den Destruktor für alle Objekte aufrufe, wird ein Speicherleck bei
TMyDatafestgestellt. PostMessage wird auch innerhalb einer Anwendung verwendet.
Kann es sein, dass im Falle von PostMessage es sich um eine "Falschmeldung" handelt?
Und sollte man eigentlich mit PostMessage variable Zeichenfolgen über eine Klasse versenden?
Viele Grüße