Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

WM_COPYDATA schreddert strings

  Alt 16. Jul 2006, 18:37
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
  Mit Zitat antworten Zitat