Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Strings in DLL (keine Übergabe) (https://www.delphipraxis.net/165282-strings-dll-keine-uebergabe.html)

tofse 21. Dez 2011 16:45

Strings in DLL (keine Übergabe)
 
Hallo,

ich erstelle gerade die ersten DLL's und habe auch einiges darüber gelesen. Was mich nun aber doch verunsichert und wozu ist noch keine Antwort gefunden habe. Das Problem bei der Übergabe von Strings an Funktionen in DLL's habe ich verstanden und auch entsprechend umgesetzt. Aber wie sieht es aus, wenn ich strings innerhalb einer DLL Funktion verwende ? Irritiert hat mich u.a. dieser Satz "LongString wird dynamisch im Speicher alloziert. Natürlich im Speicher-manager der DLL und NICHT der Anwendung...."

Deshalb einfach nochmal die Rückfrage, ob ich Strings in DLLs einfach so verwenden kann, ohne ShareMem oder so zu benutzen? Und wie gesagt, es geht nicht um die Übergabe von Strings

Danke
Christof

DeddyH 21. Dez 2011 16:46

AW: Strings in DLL (keine Übergabe)
 
Du meinst, nur intern innerhalb der DLL? Ich wüsste nicht, was dagegenspricht.

tofse 21. Dez 2011 17:12

AW: Strings in DLL (keine Übergabe)
 
Na gut :-)
War v.a. durch den Beitrag verunsichert, geht da zwar um TStringList, aber es heisst dort auch, dass der Speicher für den String dynamisch im Speichermanager der DLL alloziert wird, und da dachte ich mir, dass es evtl. auch Probleme gibt, wenn ich in der DLL einfach so Strings verwende.

Christof

DeddyH 21. Dez 2011 17:15

AW: Strings in DLL (keine Übergabe)
 
Da ging es aber um eine TStringlist als Übergabeparamater. Wenn die DLL auf Daten zugreift, die in ihrem eigenen Speichermanager vorhanden sind, was soll da anderes passieren als in einer Anwendung?

himitsu 21. Dez 2011 18:14

AW: Strings in DLL (keine Übergabe)
 
DLL und EXE sind im Grunde erstmal beises ganz normale Executables.

Alles was du innerhalb der EXE machen kannst, kannst du auch innerhalb der DLL machen.


OK, mit der VCL muß man aufpassen, denn die DLL wird ja im Thread der EXE geladen, würde somit auch im Thread der EXE starten.
Aber wenn man 2 "getrennte" VCLs im selben Thread laufen läßt, dann kommen sie sich schnell in die Quere und Probleme sind vorprogrammiert.
PS: Die VCL arbeitet über Messages und wenn bei VCLs im selben Threadcontext arbeiten, landen unweigerlich Messages in der "falschen" Messageloop der anderen VCL-Instanz und damit würde die falsche Instanz nun die Messages verarbeiten.


Solange aber Strings und Objekte nicht die Grenze zwischen DLL und EXE über queren, gibt es keinerlei Probleme.
Man kann den String problemlos in einen PChar casten und bergeben ... in diesem Fall wird die Speicherverwaltung übergangen und somit kommt nicht der falsche Speichermanager, bzw. die String-Speicherwaltung, nicht mit einem ihr nicht gehörenden Sring in Berührung.

hoika 21. Dez 2011 19:49

AW: Strings in DLL (keine Übergabe)
 
Hallo,

nimm einfach WideString statt String/UnicodeString,
dann kannst du sogar Strings aus der DLL
aus der Exe zurückgeben.


Heiko

tofse 22. Dez 2011 06:32

AW: Strings in DLL (keine Übergabe)
 
Danke für die ausführliche Antwort. Jetzt ist einiges klarer
Zitat:

Zitat von himitsu (Beitrag 1142617)
DLL und EXE sind im Grunde erstmal beises ganz normale Executables.

Alles was du innerhalb der EXE machen kannst, kannst du auch innerhalb der DLL machen.


OK, mit der VCL muß man aufpassen, denn die DLL wird ja im Thread der EXE geladen, würde somit auch im Thread der EXE starten.
Aber wenn man 2 "getrennte" VCLs im selben Thread laufen läßt, dann kommen sie sich schnell in die Quere und Probleme sind vorprogrammiert.
PS: Die VCL arbeitet über Messages und wenn bei VCLs im selben Threadcontext arbeiten, landen unweigerlich Messages in der "falschen" Messageloop der anderen VCL-Instanz und damit würde die falsche Instanz nun die Messages verarbeiten.


Solange aber Strings und Objekte nicht die Grenze zwischen DLL und EXE über queren, gibt es keinerlei Probleme.
Man kann den String problemlos in einen PChar casten und bergeben ... in diesem Fall wird die Speicherverwaltung übergangen und somit kommt nicht der falsche Speichermanager, bzw. die String-Speicherwaltung, nicht mit einem ihr nicht gehörenden Sring in Berührung.


angos 22. Dez 2011 06:44

AW: Strings in DLL (keine Übergabe)
 
Hi,

@Himitsu: D.h. Wenn ich in der Exe eine VCL-basierte GUI benutze und in der DLL ebenfalls, dann bekomme ich dadurch Probleme beim Ausführen?
Hast du dazu noch weitere Infos/Links?

Gruß

Bummi 22. Dez 2011 06:56

AW: Strings in DLL (keine Übergabe)
 
@angos


versuch es einfach mal, ein Formular in der DLL mit ein paar Komponenten, üblicherweise kommt beim Laden schon die Meldung das bestimmte Klassen bereits registriert sind.
Wenn Du so etwas machen möchtest musst Du beide (DLL,EXE) mit Laufzeitpackages erzeugen ....

Bernhard Geyer 22. Dez 2011 07:12

AW: Strings in DLL (keine Übergabe)
 
Zitat:

Zitat von Bummi (Beitrag 1142653)
versuch es einfach mal, ein Formular in der DLL mit ein paar Komponenten, üblicherweise kommt beim Laden schon die Meldung das bestimmte Klassen bereits registriert sind.

Dann bekommen wir seit 10 Jahren für unsere Hauptanwendung mit Pluginkonzept genau diese übliche Fehlermeldung nicht :-)
Solange du keine lebende Objekte zwischen Exe und Dll tauschen willst ist das keine Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.
Seite 1 von 2  1 2      

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