![]() |
Probleme mit WM_CopyData
Hallo,
warum funktioniert folgender, aus einem Tut abgeschriebener einfacher Code nicht? (Erzeugt mit Delphi 2010 auf Win7 64-bit) Sender:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aCopyData: TCopyDataStruct; p: PChar; begin p := 'String To send'; with aCopyData do begin dwData := 0; cbData := StrLen(p) + 1; lpData := p; end; SendMessage(FindWindow('TFormRecv', nil), WM_COPYDATA, Longint(Handle), Longint(@aCopyData)); end; Empfänger:
Delphi-Quellcode:
Beim Empfänger kommt nach den ersten Buchstaben nur noch Müll an: 'String T....' Die letzten Buchstaben werden in irgendwelche Sonderzeichen umgewandelt.
type
TFormRecv = class(TForm) ListBox1: TListBox; private { Private-Deklarationen } procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; public { Public-Deklarationen } end; var FormRecv: TFormRecv; implementation {$R *.dfm} procedure TFormRecv.WMCopyData(var Msg: TWMCopyData); var s : string; begin s := String(PChar(Msg.CopyDataStruct.lpData)) ; ShowMessage(s); end; Bin für jeden Hinweis dankbar. Steffen |
AW: Probleme mit WM_CopyData
p ist ein Zeiger ins Nirvana
|
AW: Probleme mit WM_CopyData
Delphi-Quellcode:
with aCopyData do begin
dwData := 0; cbData := (StrLen(p) + 1) * SizeOf(Char); //Größe in Bytes lpData := p; end; |
AW: Probleme mit WM_CopyData
@Detlef
Danke für den Tipp. Genau die Größendefinition war es. Seltsam nur, dass der fehlerhafte Code früher einmal funktioniert haben muss. Ich glaube, das Beispiel stammt von 2003. Weiß aber nicht, mit welcher Delphi-Version erstellt. Steffen |
AW: Probleme mit WM_CopyData
Das war mit Sicherheit eine Ansi-Version (also bis Delphi 2007 einschließlich). In der jetzigen Fassung sollte es aber mit jeder Version passen.
|
AW: Probleme mit WM_CopyData
weil Pchar auf 16Bit Char zeigt (D2010). Nimm Pansichar und es klappt wieder.
Gruß K-H |
AW: Probleme mit WM_CopyData
Wozu PAnsiChar? Jetzt klappt es ja auch, nachdem die übergebene Größe richtig angegeben wurde.
|
AW: Probleme mit WM_CopyData
Zitat:
Früher wurde immer nach Unicode Unterstützung geschrien. Jetzt ist sie da und jetzt gibt es immer wieder die Ratschläge alles wieder auf Ansi zurückzustutzen. :roll: |
AW: Probleme mit WM_CopyData
Entweder man arbeitet mit Ansichar (8Bit) oder mit Char (16Bit)aber das sollte man dann auch sauber durchziehen.
Und wenn es eine saubere Typbezeichnung gäbe, wie z.B. Char8 oder Char16 dann würden sich auch viele nicht so schwertun. Aber ich glaube das hatten wir hier schon alles einmal. Gruß K-H |
AW: Probleme mit WM_CopyData
Zitat:
|
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