Hallo,
wenn ich während des verarbeitens einer WM_COPYDATA-Message schon wieder eine an die selbe Anwendung wegschicke, dann scheint das nicht zu funktionieren. Ich habe mir deswegen einen Thread gebaut:
Delphi-Quellcode:
procedure TLogMessageThread.Execute;
begin
inherited;
if Interval >= 0 then
Sleep(Interval);
Return := SendMessage(TargetHandle,WM_COPYDATA,Senderhandle,Integer(@CopyDataStruct));
end;
und rufe den auf:
Delphi-Quellcode:
//prepare return information
CopyData.dwData := Integer(ltRegisterAnswer);
CopyData.cbData := sizeof(TLogInfo);
CopyData.lpData := GetMemory(CopyData.cbData);
PLogInfo(CopyData.lpData).YourHandle := LIReceived.YourHandle;
PLogInfo(CopyData.lpData).LogIdentifier := LL.Index;
//send it with the thread, so we can return
with TLogMessageThread.Create(true) do
begin
FreeOnTerminate := True; // fire and forget!
TargetHandle := LIReceived.YourHandle;
Senderhandle := WHandle;
Interval := 5; //just to make sure we have returned
CopyDataStruct := CopyData;
// we SHOULD resume the thread, shouldn't we?
Resume;
Log('registering initiated');
end;
es kommt aber beim gegenüber (Application.OnMessage) nix an:
Delphi-Quellcode:
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var CpDt: PCopyDataStruct;
begin
if Msg.message = MessageQuestion then
.......
else if Msg.message = WM_COPYDATA then
begin
CpDt := TWMCopyData(Pointer(@Msg)^).CopyDataStruct;
case TLogType(CpDt.dwData) of
ltRegisterAnswer:
begin
LogIndex := TLogInfo(CpDt.lpData^).LogIdentifier;
MLog.Lines.Add('we got a log index: ' + IntToStr(LogIndex));
end;
end;
end;
end;
Sprich, die log-message wird nicht geschrieben.
Mach ich was grundlegendes falsch? hätte das Sendmessage auch direkt klappen sollen?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1