Einzelnen Beitrag anzeigen

globalv

Registriert seit: 23. Aug 2020
4 Beiträge
 
#1

PostMessage und Speicherlecks

  Alt 23. Aug 2020, 07:00
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
  Mit Zitat antworten Zitat