Ich glaube ich habe irgendwo einen Fehler, finde ihn aber nicht
Ich rufe eine Testprozedur auf
Delphi-Quellcode:
for i := 0 to 50000 do
TTestUnit.Test(TTest.tdmPostMessage, Form1.Handle, WM_THREAD_MSG, 0, 0, 'TEST STR');
Delphi-Quellcode:
class procedure TTestUnit.Test(Method: TTest; hWnd:
Winapi.Windows.hWnd; Msg: UINT; wParam:
Winapi.Windows.wParam; lParam:
Winapi.Windows.lParam; aString: PChar);
var
msgData: PTestData;
begin
New(msgData);
msgData.Msg := Msg;
msgData.wParam := wParam;
msgData.lParam := lParam;
msgData.aString := aString;
case Method
of
tdmSendMessage:
SendMessage(hWnd, msgData.Msg, 0,
Winapi.Windows.lParam(msgData));
tdmPostMessage:
PostMessage(hWnd, msgData.Msg, 0,
Winapi.Windows.lParam(msgData));
tdmQueue:
;
end;
end;
{*
TTestData = record
Msg: UINT;
wParam: Winapi.Windows.wParam;
lParam: Winapi.Windows.lParam;
aString: PChar;
end;
PTestData = ^TTestData ;
*}
Delphi-Quellcode:
type
TForm1...
public
procedure TTestMessage(var msg: TMessage); message WM_THREAD_MSG; // WM_THREAD_MSG ist WM_USER + 991;
implementation
procedure TForm1.TTestMessage(var msg: TMessage);
var
msgData: PTestData;
begin
msgData := PTestData(msg.lParam);
try
Caption := PTestData(msg.lParam).aString;
finally
Dispose(msgData);
end;
end;
Beim Ausschalten des Programms erhalte ich exakt 40001 MemoryLeaks.