![]() |
StringList An Dll übergeben...
Hallo,
Ich hab n Problem beim übergeben von StringListen an eine Dll. Und zwar bekomme ich immer eine Zugriffsverletzung wenn ich auf die count eigenschafft zugreifen möchte... weis einer woran das liegt? Hier mal ein einfaches Beispiel Quelltext im Programm welches auf die dll zugreift:
Delphi-Quellcode:
Quelltext in der Dll:
var
StringList1, StringList2: StringList; i: Integer; begin StringList1:= TStringList.Create; StringList2:= TStringList.Create; for i:=0 to Memo1.Lines.Count - 1 do StringList1.Add(Memo1.Lines[i]); // CompareLists ist die function in der dll. if CompareLists(StringList1, StringList2) then ShowMessage('Die Listen Stimmen überein!');
Delphi-Quellcode:
function CompareLists(List1, List2: TStringList): Boolean; stdcall;
var i: Integer; begin Result:=true; if List1.Count <> List2. Count then Result:=false else ... end; |
Re: StringList An Dll übergeben...
Ja, daran das Du Objekte nicht so einfach an eine DLL übergeben kannst ;).
|
Re: StringList An Dll übergeben...
Eigentlich sollte es in diesem speziellen Fall keine Probleme geben. Hast du möglicherweise im Programm das stdcall vergessen?
|
Re: StringList An Dll übergeben...
Jop das steht da... Was genau meinst du mit "diesem speziellen Fall"?
lg Sir K |
Re: StringList An Dll übergeben...
Nunja, nur wenn wirklich die gleichen RTTI verwendet werden, was aber nirgendwo steht. Von daher wäre ich vorsichtig zu sagen, daß in diesem Fall kein Problem besteht.
|
Re: StringList An Dll übergeben...
Grund: bei Klassen hat jedes Modul (EXE und DLL) eine eigene RTTI und da dort die Klassen über Pointer und nicht über Namen verifiziert werden, ist TStringList (EXE) <> TStringList (DLL)
du kannst aber die Eigenschaft .Text als String (mit ShareMem und Co.) oder als PChar übergeben und drüben in eine andere StringList reinfüllen. |
Re: StringList An Dll übergeben...
Der Trick liegt darin, die RTTI nicht zu verwenden. Solange man also die Operatoren is und as konsequent nicht verwendet, gibt es auch keine Probleme. Auch nur-Lesen Zugriff auf die Strings ist in Ordnung. Man muss nur darauf achten, die die Strings nicht "einfach so" längerfristig (d.h. nach dem Ende des ursprünglichen Aufrufs) zu speichern; man muss dann UniqueString() verwenden, um eine DLL-eigene Kopie zu erstellen.
|
Re: StringList An Dll übergeben...
Bei TStringList bietet sich allerdings auch noch der triviale
Weg über die Text-Eigenschaft die ganze Liste als String via PChar zu übergeben. Grüße /// Martin PS: Dafür muß die StringListe dann in der dll neu intantziert werden und mit die Texteigenschaft dann zugewiesen werden. |
Re: StringList An Dll übergeben...
Zitat:
Auch allen anderen Danke für die Hilfe!! lg Sir K |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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