AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringList An Dll übergeben...

Ein Thema von Sir K · begonnen am 21. Mai 2009 · letzter Beitrag vom 23. Mai 2009
Antwort Antwort
Sir K

Registriert seit: 30. Nov 2008
75 Beiträge
 
RAD-Studio 2009 Arc
 
#1

StringList An Dll übergeben...

  Alt 21. Mai 2009, 16:59
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:
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!');
Quelltext in der Dll:
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;
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#2

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:02
Ja, daran das Du Objekte nicht so einfach an eine DLL übergeben kannst .
Fridolin Walther
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:03
Eigentlich sollte es in diesem speziellen Fall keine Probleme geben. Hast du möglicherweise im Programm das stdcall vergessen?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Sir K

Registriert seit: 30. Nov 2008
75 Beiträge
 
RAD-Studio 2009 Arc
 
#4

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:05
Jop das steht da... Was genau meinst du mit "diesem speziellen Fall"?

lg

Sir K
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#5

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:06
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.
Fridolin Walther
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#6

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:07
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 17:15
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#8

Re: StringList An Dll übergeben...

  Alt 21. Mai 2009, 18:13
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.
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Sir K

Registriert seit: 30. Nov 2008
75 Beiträge
 
RAD-Studio 2009 Arc
 
#9

Re: StringList An Dll übergeben...

  Alt 23. Mai 2009, 12:23
Zitat von mschaefer:
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.
Danke!! Hab das ganze mal so probiert und klappt ohne Probleme und Einschränkungen. xD

Auch allen anderen Danke für die Hilfe!!


lg

Sir K
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz