Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WM_CopyData mit Boolschen Variablen (https://www.delphipraxis.net/31022-wm_copydata-mit-boolschen-variablen.html)

Luckie 3. Okt 2004 10:27

Re: WM_CopyData mit Boolschen Variablen
 
Argh. Hättest du nicht warten können bis er einen neuen Thread aufmacht? Hier findet das doch keiner. Oder würdest du einen Thread öffnen, wenn du nach with..do suchst, bei dem im Betreff was von WM_COPPYDATA steht? :roll:

Helmi 3. Okt 2004 10:30

Re: WM_CopyData mit Boolschen Variablen
 
grins :-)

danke an euch beide :-)

Nogge 31. Okt 2005 10:54

Re: WM_CopyData mit Boolschen Variablen
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
  GetMem(MyRecord, sizeof(TMyRecord));

1.) Sollte ein Pointer nicht eher mit New initialisiert werden?
2.) Ich habe die non-record- und record-Variante für TStringList bzw. TStrings ausprobiert (Dll -> Programm). Jedoch erhalte ich jedesmal eine AV, wenn ich innerhalb der WM_COPYDATA-Proc auf den Pointer der StringList bzw. des record zugreife. Kann mir jemand sagen, wieso dort immer ne Fehlermeldung erscheint? (Liegt es vllt daran, dass in TStrings bzw. TStringList undefinierte Strings enthalten sind? In einem record muss man ja immer eine max. Länge für jeden String angeben...)

Flocke 31. Okt 2005 12:20

Re: WM_CopyData mit Boolschen Variablen
 
@Nogge: Die Daten müssen vollständig in dem Record stehen. Du darfst dort also keine Zeiger benutzen - die sind im Adressraum der anderen Anwendung unbekannt.

Nogge 31. Okt 2005 12:26

Re: WM_CopyData mit Boolschen Variablen
 
Im record selbst stehen ja auch meine vollständigen Daten:
Delphi-Quellcode:
type
  PRecordList = ^TRecordList;
  TRecordList = record
    StringList : TStringList;
  end;
  [...]
  if (MainApp > 0) and (SLData.Count > 0) then
  begin
    New(SLPointer);
    SLPointer^.StringList:=TStringList.Create;
    SLPointer^.StringList.AddStrings(SLData);
    with CDS do
    begin
      dwData:=LoWord(lpici.lpVerb); // MY_PLAY(0) oder MY_ADD(1)
      cbData:=SizeOf(TRecordList);
      lpData:=SLPointer;
    end;
    SendMessage(MainApp,WM_COPYDATA,0,LParam(@CDS));
  end;

SirThornberry 31. Okt 2005 12:41

Re: WM_CopyData mit Boolschen Variablen
 
@Nogge: In deinem Record stehen NICHT die vollständigen Daten. Du hast dort Maximal eine Varible vom Typ TStringlist was wiederum nur ein Pointer ist auf die Instanz.

Nogge 31. Okt 2005 12:47

Re: WM_CopyData mit Boolschen Variablen
 
Ah, verstehe. Kann ich stattdessen ein array of string[255] im record deklarieren? Müsste doch gehen, da es ausgeschrieben ein array of array of Char wäre, oder?

SirThornberry 31. Okt 2005 13:07

Re: WM_CopyData mit Boolschen Variablen
 
ein "Array of String[255]" geht auch nicht da es ja dann ein dynamiches Array ist. Und ein dynamisches Array ist auch ein pointer. ein "Array[von..bis] of string[255]" geht jedoch da es staatich ist und somit nicht dynamisch speicher angefodert wird.

Da es bei einem Dynamischen Array aber wie bei einem String ist (ist ein Zeiger der auf die zusammenhängenden Datein zeigt), kannst du auch einfach den Bereich angeben auf den der ArrayPointer zeigt.

Flocke 31. Okt 2005 13:32

Re: WM_CopyData mit Boolschen Variablen
 
Wenn du eine Stringliste übergeben willst, dann benutze einfach die Eigenschaft Text und übergib den gesamten Inhalt (alle Zeilen) als ein String (also kein Record).

SirThornberry 31. Okt 2005 13:35

Re: WM_CopyData mit Boolschen Variablen
 
@Flocke: In dein meisten fällen mag dies funktionieren, allerdings gibt es auch fälle in denen das Ergebnis auf der Empfängerseite dann verfälscht ist. Hier ein Beispiel wo es nicht funktioniert:
Delphi-Quellcode:
var LStrList: TStringlist;
begin
  LStrList := TStringList.Create;
  LStrList.Add('zeile1-Teil1' + #13#10 + 'zeile1-Teil2');
  LStrList.Add('zeile2');
auf der Empfängerseite wären das dann aber 3 einträge in der Stringlist, auf der Senderseite sind es jedoch nur 2 Einträge.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Seite 2 von 4     12 34      

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