AGB  ·  Datenschutz  ·  Impressum  







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

Strings in DLL (keine Übergabe)

Ein Thema von tofse · begonnen am 21. Dez 2011 · letzter Beitrag vom 22. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 17:45
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 17:46
Du meinst, nur intern innerhalb der DLL? Ich wüsste nicht, was dagegenspricht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#3

AW: Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 18:12
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 18:15
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 19:14
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Strings in DLL (keine Übergabe)

  Alt 21. Dez 2011, 20:49
Hallo,

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


Heiko
Heiko
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#7

AW: Strings in DLL (keine Übergabe)

  Alt 22. Dez 2011, 07:32
Danke für die ausführliche Antwort. Jetzt ist einiges klarer
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.
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Strings in DLL (keine Übergabe)

  Alt 22. Dez 2011, 07:44
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ß
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Strings in DLL (keine Übergabe)

  Alt 22. Dez 2011, 07:56
@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 ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Strings in DLL (keine Übergabe)

  Alt 22. Dez 2011, 08:12
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:44 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