Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread un dDLL (https://www.delphipraxis.net/134090-thread-un-ddll.html)

gargano 15. Mai 2009 11:25


Thread un dDLL
 
Hi Leute,

wahrscheinlich ist dies auch schon mal behandelt worden, ich habe es leider nicht gefunden.

Frage : Wenn man mehrere Threads erzeugt und jeder der Thread die gleiche DLL lädt, sind dann diese DLL's im Speicher getrennt ?

Viele Grüße
Gargano

Bernhard Geyer 15. Mai 2009 11:31

Re: Thread un dDLL
 
Nein. Windows-Threads haben keinen getrennten Adressraum!

gargano 15. Mai 2009 12:00

Re: Thread un dDLL
 
mmh,
was wäre denn ein geeigneter Ansatz um DLL's gleichen Namens in unterschiedlichen Speicherbereichen zu laden ?

Im gleichen Process scheint ja dies nicht zu gehen.

Gruß
Gargano

Bernhard Geyer 15. Mai 2009 12:04

Re: Thread un dDLL
 
Wie wäre es die DLL so zu erweitern das sie mit mehreren Connection arbeiten kann.
Z.B. mit einer Init und Close-Methode die eine ID zurückliefert und auch diese wieder freigibt. Jede Funktion der DLL erwartet als ersten Parameter diese ID so das intern unterschieden werden kann mit welche Connection gearbeitet wird.

Luckie 15. Mai 2009 12:04

Re: Thread un dDLL
 
Zitat:

Zitat von gargano
was wäre denn ein geeigneter Ansatz um DLL's gleichen Namens in unterschiedlichen Speicherbereichen zu laden ?

Im gleichen Process scheint ja dies nicht zu gehen.

Denk mal über deinen letzten Satz nach, da steckt doch schon die Lösung drin.

Aber warum dürfen die Instanzen der DLL nicht den gleichen Adressraum benutzen? Ich denke, du solltest dein Konzept überdenken und entsprechend ändern.

sirius 15. Mai 2009 12:06

Re: Thread un dDLL
 
Und wenn man aus dieser ID einen Interfacezeiger macht ist man endlich bei OOP angekommen. Und DLL und Interface, da könnte man gleich über COM-Server nachdenken. Dann ist die ganze Sache gänzlich abgerundet.
Die Leute, welche das COM-Konzept entworfen haben, hatten sich anscheinend die gleichen Gedanken gemacht.

Bernhard Geyer 15. Mai 2009 12:13

Re: Thread un dDLL
 
Zitat:

Zitat von sirius
Und wenn man aus dieser ID einen Interfacezeiger macht ist man endlich bei OOP angekommen. Und DLL und Interface, da könnte man gleich über COM-Server nachdenken. Dann ist die ganze Sache gänzlich abgerundet.
Die Leute, welche das COM-Konzept entworfen haben, hatten sich anscheinend die gleichen Gedanken gemacht.

Und dann versuchen zwei verschiedene Versionen der Anwendung parallel berteiben zu wollen und über die DLL-Hölle fluchen.

gargano 15. Mai 2009 12:16

Re: Thread un dDLL
 
@Bernhardt : Das habe ich in meiner DLL so gemacht.

Allerdings ist es so, daß das Programm verschiedene Geräte steuern muß.
Die Routinen zu den Geräten stellt der Hersteller in einer DLL bei.

Alles ist gut, wenn nur ein Gerät von derselbe Art angeschlossen ist.
Problem ist, wenn mehrere Geräte derselben Art angeschlossen sind, die allerdings
auf verschiedenen Ports liegen -> Die DLL ist diegleiche.

Falls nun diese DLL nicht die Fähigkeit hat mehrere Geräte zu bedienen, was dann ?

Gruß
Gargano

sirius 15. Mai 2009 12:18

Re: Thread un dDLL
 
Zitat:

Zitat von gargano
Falls nun diese DLL nicht die Fähigkeit hat mehrere Geräte zu bedienen, was dann ?

Nicht davor zurückschrecken auch mehrere Prozesse zu starten ;)

Bernhard Geyer 15. Mai 2009 12:28

Re: Thread un dDLL
 
Zitat:

Zitat von gargano
Falls nun diese DLL nicht die Fähigkeit hat mehrere Geräte zu bedienen, was dann ?

Erst mal den Hersteller auf den Mangel aufmerksam machen und wenn er nix macht diese DLL jeweils umbenennen und hoffen das nicht andere Ressourcen Probleme bereiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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