Hallo, ich verschicke feste Daten (in einem record) und einen zusätzlichen string, der hinten dran kommt, per WM_COPYDATA.
Schreiben:
Delphi-Quellcode:
//xx//
LI.YourHandle :=
Handle;
LI.LogIdentifier := LogIndex;
s := ELog.Text + #13#10;
ms := TMemoryStream.Create;
ms.
Write(LI,sizeof(TLogInfo));
ms.
Write(s[1],length(s));
CpDt.dwData := Integer(ltWrite);
CpDt.cbData := ms.Size;
CpDt.lpData := ms.Memory;
SendMessage(LogHandle,WM_COPYDATA,
Handle,Integer(@CpDt));
Lesen:
Delphi-Quellcode:
//xx//
MS := TMemoryStream.Create;
MS.Write(Msg.CopyDataStruct.lpData,Msg.CopyDataStruct.cbData);
MS.Position := sizeof(LIReceived);
setlength(AddedString,MS.Size - MS.Position);
MS.Read(AddedString[1],length(AddedString));
Dabei wird aus "abcde" "s´Ñw0 ".
was mache ich falsch...?
EDIT:
ich fange offenbar zu früh mit dem Lesen an.... ein längerer string wird teilweise übernommen. sizeof(TLogInfo) gibt 8 zurück. Deklaration sieht aber so aus:
Delphi-Quellcode:
type
TLogInfo = record
YourHandle: hWnd;
LogIdentifier: Integer;
end;
Ist 8 nicht ein normaler Pointer?! sollte der record nicht 32 bit haben?
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