![]() |
Re: WM_CopyData mit Boolschen Variablen
Zitat:
Delphi-Quellcode:
Müsste ich die Länge des arrays mit der max. Länge (=256) der Strings multiplizieren?
type
PStringArray = ^TStringArray; TStringArray = array of String[255]; [...] var SAPointer : PStringArray; [...] if (MainApp > 0) and (SLData.Count > 0) then begin New(SAPointer); SetLength(SAPointer^,SLData.Count); for i:=0 to SLData.Count-1 do SAPointer^[i]:=SLData.Strings[i]; with CDS do begin dwData:=LoWord(lpici.lpVerb); // MY_PLAY(0) oder MY_ADD(1) cbData:=???; lpData:=SAPointer; end; SendMessage(MainApp,WM_COPYDATA,0,LParam(@CDS)); end; |
Re: WM_CopyData mit Boolschen Variablen
genau so ist es. Wenn ein StringEllement eine größe von 255 Bytes hat so kannst du mit multiplication der Anzahl die gesamtgröße herausfinden. und wie du selbst schon geschrieben hast ist die größe eines Strings bei "[255]" gleich 256 Bytes. Aber sowas sollte man am besten mit "SizeOf" abfragen und nicht festen in den Quellcode tippen.
|
Re: WM_CopyData mit Boolschen Variablen
Kann mir jemand von euch verraten, wieso man das über WM_COPYDATA machen würde? Das ist doch totaler Quark wenn ich nur Boolsche Variable übergeben will.
Mit LPARAM und WPARAM habe ich bei einer selbstdefinierten Fensternachricht ganze 64 Boolwerte, die ich auf einfachste Weise und ohne Zeigerfrickeleien übertragen kann. Habe ich in der Frage was überlesen? |
Re: WM_CopyData mit Boolschen Variablen
Mmh, leider ist der Versuch fehlgeschlagen ;_;
Delphi-Quellcode:
Mit dieser Länge erhalte ich nun zwar keine AV mehr, jedoch ist der Inhalt des arrays vollkommen willkürlich gefüllt. Hier mal mein Code vom Empfängerprogramm:
cbData:=Length(SAPointer^) * SizeOf(ShortString);
Delphi-Quellcode:
procedure TFMain.WMCopyData(var Msg: TWMCopyData);
type PStringArray = ^TStringArray; TStringArray = array of ShortString; const MY_PLAY = 0; MY_ADD = 1; var SAPointer : PStringArray; i : Integer; FileName : ShortString; [...] begin SAPointer:=PStringArray(Msg.CopyDataStruct.lpData); if (SAPointer = nil) then exit; [...] try case Msg.CopyDataStruct.dwData of MY_PLAY : begin for i:=Low(SAPointer^) to High(SAPointer^) do begin FileName:=SAPointer^[i]; [...] end; end; MY_ADD : begin for i:=Low(SAPointer^) to High(SAPointer^) do begin FileName:=SAPointer^[i]; [...] end; end; MY_SHOW : begin [...] end; end; finally [...] // Einzelelemente freigeben for i:=High(SAPointer^) downto Low(SAPointer^) do SetLength(SAPointer^[i],0); // array freigeben SetLength(SAPointer^,0); Dispose(SAPointer); end; end; |
Re: WM_CopyData mit Boolschen Variablen
Wie sieht denn dein Code zum Senden aus? Warum benutzt du einen Pointer vor dem Senden? Warum nicht einfach @ und dann dein Array von Shortstrings?
|
Re: WM_CopyData mit Boolschen Variablen
Mein Code zum Senden steht doch bereits weiter oben im Thread. Kannste deine Lösungsmöglichkeit vllt genauer erläutern und etwas Sourcecode hinzufügen?
|
Re: WM_CopyData mit Boolschen Variablen
Zitat:
|
Re: WM_CopyData mit Boolschen Variablen
Jo, das ging an dich. Allerdings bezog sich meine Frage auf deine letzte Antwort, wo du mir etwas über meine Methoden zum Senden von einem bzw. mehreren Strings sagen wolltest. Deine Methoden mit der eigenen Nachricht habe ich schon verstanden, darum ging es mir ja nicht^^
|
Re: WM_CopyData mit Boolschen Variablen
Zitat:
|
Re: WM_CopyData mit Boolschen Variablen
Ne, weiter oben (#21) steht mein Sende-Code ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 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