![]() |
WM_COPYDATA sendet nur 62 Bytes
Hallo Zusammen,
ich versuche hiermit einen String zu einer anderen Delphi App zu senden. Der String ist 120 Bytes lang. Gesendet werden jedoch nur die ersten 62 Bytes. Hat jemand eine Idee warum?
Delphi-Quellcode:
procedure TfrPlantafel.SendData(aImage, aLink, aText: String);
var receiverHandle : THandle; copyDataStruct : TCopyDataStruct; SendMsgText: String; begin receiverHandle := FindWindow(PChar('TfrSenderApp'),PChar('frSenderApp')); SendMsgText := Format('%s;%s;%s',[aLink, aImage, aText]); //<< SendMsgText ist 120 Bytes lang. if receiverHandle > 0 then begin copyDataStruct.dwData := Ord(ntSendWhatsAppMsg); copyDataStruct.cbData := 1 + Length(SendMsgText); copyDataStruct.lpData := PChar(SendMsgText); SendMessage(receiverHandle, WM_COPYDATA, LPARAM(Handle), WPARAM(@copyDataStruct)) ; end else begin bsm('Die Sender Anwendung läuft nicht.'); end; end; Gruß Kostas |
AW: WM_COPYDATA sendet nur 62 Bytes
Zitat:
Und gerade bei solchen prozessübergreifenden Daten verwendet man NIEMALS "dynamische" DatenFormate (maximal dann, wenn man auch das Format mit übergibt und der Andere das dann auch beachtet) Also z.B. explizit WideChar (mit PWideChar und WideString bzw. UnicodeString). |
AW: WM_COPYDATA sendet nur 62 Bytes
Danke für die Antwort.
vermutlich habe ich dich nicht richtig verstanden, ich habe String durch WideString ersetzt und PChar durch PWideChar. Das hat noch nichts gebracht. Oder meintest du ich soll nicht String sondern ein Array of WideChar verwenden?
Delphi-Quellcode:
procedure TfrPlantafel.SendData(aImage, aLink, aText: String);
var receiverHandle : THandle; copyDataStruct : TCopyDataStruct; SendMsgText: WideString; begin receiverHandle := FindWindow(PChar('TfrSenderApp'),PChar('frSenderApp')); SendMsgText := Format('%s;%s;%s',[aLink, aImage, aText]); //<< SendMsgText ist 120 Bytes lang. if receiverHandle > 0 then begin copyDataStruct.dwData := Ord(ntSendWhatsAppMsg); copyDataStruct.cbData := 1 + Length(SendMsgText); copyDataStruct.lpData := PWideChar(SendMsgText); SendMessage(receiverHandle, WM_COPYDATA, LPARAM(Handle), WPARAM(@copyDataStruct)) ; end else begin bsm('Die Sender Anwendung läuft nicht.'); end; end; |
AW: WM_COPYDATA sendet nur 62 Bytes
cbData bezeichnet die Byte-Größe.
Delphi-Quellcode:
[edit]Es müsste wohl eher heißen
copyDataStruct.cbData := 1 + Length(SendMsgText * SizeOf(Char));
Delphi-Quellcode:
[/edit]
copyDataStruct.cbData := (1 + Length(SendMsgText)) * SizeOf(Char);
|
AW: WM_COPYDATA sendet nur 62 Bytes
Wenn das als PChar/PWideChar übertragen wird, dann gehört die abschließende #0 mit dazu
und die ist auch 2 Byte groß.
Delphi-Quellcode:
copyDataStruct.cbData := (Length(SendMsgText) + 1) * SizeOf(WideChar);
copyDataStruct.lpData := PWideChar(SendMsgText); |
AW: WM_COPYDATA sendet nur 62 Bytes
Herzlichen Dank, genau so funktioniert es.
Jetzt ist auch klar was du meintest. :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz