AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Gleiche DLL im selben Prozess mehrfach laden?
Thema durchsuchen
Ansicht
Themen-Optionen

Gleiche DLL im selben Prozess mehrfach laden?

Ein Thema von nuclearping · begonnen am 4. Jul 2008 · letzter Beitrag vom 5. Jul 2008
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#21

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 4. Jul 2008, 15:17
Wäre es da nicht evtl. einfacher die DLL so zu strukturieren, dass der gleichzeitige Zugriff aus einer Anwendung funktioniert? Also keine globalen Variablen innerhalb der DLL verwenden und damit ist meistens schon ein Großteil getan.

Typischerweise kann man so etwas dann so lösen, dass die Objekte als Parameter übergeben werden. Entweder per ID oder sogar direkt den Pointer. Ich kenne jetzt die Schnittstelle nicht weswegen ich da kein wirklich sinnvolles Beispiel nennen kann. Aber ich denke an nachfolgendem Pseudo-Code dürfte das Prinzip klar werden.
Code:
net_connect(ip, port): pointer;
net_close(net: pointer);
net_read(net: pointer; ...);
net_write(net: pointer; ...);


// Das Innere der Methoden könnte dann so aussehen.
net_connect(ip, port): pointer;
begin
  Result := TNetConnection.Create(ip, port);
end;

net_close(net: pointer);
begin
  TNetConnection(net).Close;
  TNetConnection(net).Free;
end;

net_read(net: pointer; ...);
begin
  TNetConnection(net).Read;
end;
Vorteil davon wäre, falls sich was an den Klassen verändert bleiben sie kompatibel, da ja alles innerhalb der DLL abgewickelt wird. Evtl kann man dem Kompfort zu liebe dann auch noch eine Wrapperklasse erstellen. Das ist sicher etwas mehr Aufwand aber ich denke das wäre die solideste Lösung.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#22

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 4. Jul 2008, 15:30
Zitat von chaosben:
Ja, das hab ich auch grad gelesen, aber das bezieht sich ja zu 95% auf die Packages für Delphi. Die sind durch die Abhängigkeiten zur VCL,... natürlich versionsabhängig.

Aber so ein kleines, feines Package mit einer selbstgeschrieben Klasse drin, sollte in den meisten Delphis funktionieren. (Behaupte ich, ohne es ausprobiert zu haben)
Definitiv nein.
Alle Laufzeit BPL müssen mit der gleichen Compilerversion compiliert sein. Borland hat mit jeder Version das interne Format der
BPL geändert.
In der Regel muss auch noch mit der gleichen Sourceversion bei Abhängigkeiten compiliert werden.
Das das nicht geklappt hat, merkt erst der Anwender. (Package kann nicht geladen werden, da mit einer anderen Version von ...
compiliert wurde.) Ich habe in einem Projekt 3 Packages als Laufzeitpackages declariert.
Alle nicht durchschaubaren Abhängigkeiten haben dazu geführt, das ich etwa 60 Mbyte Laufzeitumgebung mit ausliefern mußte.

Gruß Peter
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#23

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 4. Jul 2008, 15:37
Zitat von Lossy eX:
Wäre es da nicht evtl. einfacher die DLL so zu strukturieren, dass der gleichzeitige Zugriff aus einer Anwendung funktioniert? Also keine globalen Variablen innerhalb der DLL verwenden und damit ist meistens schon ein Großteil getan.

Typischerweise kann man so etwas dann so lösen, dass die Objekte als Parameter übergeben werden. Entweder per ID oder sogar direkt den Pointer.
Die einzige globale Variable in der DLL ist diese eine Klasse. Die kann ich aber nicht vermeiden, da die verschiedenen Funktionen darauf zurückgreifen. Ich müßte dann jedesmal in der Funktion die Klasse erstellen.

Per Pointer geht nicht, da der Benutzer ja von ausserhalb mit der Klasse arbeiten muss. Ergo muß der Compiler sie kennen und da sind wir wieder beim Problem.

Ich versuche das jetzt per ID umzusetzen, indem ich in der DLL eine TObjectList habe, die die Instanzen der Klasse mitschleppt und vor jedem Zugriff auf die Funktionen, die Klasse ausserhalb durch ihre ID die richtige Instanz setzt.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#24

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 4. Jul 2008, 17:21
Hier wäre eine ActiveX-DLL wohl eine gute Lösung.
Damit umgehst du alle bisherigen Probleme.
Vorteile:
* aus vielen Prog.-sprachen verwendbar; keine Probleme mit vesch. Delphi Versionen
* man kann beliebig viele Objekte aus der DLL erzeugen, obwohl die DLL nur einmal geladen wurde
* du bietest deinen Benutzern eine definierte Schnittstelle an; die ActiveX-DLL ist selbstdokumentierend

Natürlich zu dem Preis, dass du dich erst in die Materie einarbeiten musst und manche Dinge etwas holprig von der Hand gehen. Es gibt auch Einschränkungen der Datentypen, die benützt werden können.
Andreas
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#25

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 4. Jul 2008, 17:37
Hm, das klingt auch gut. Warum hat das noch keiner früher gesagt? Danke, werd mir das auf jeden Fall mal anschauen.

Die Lösung mit der Trennung der Instanzen in der DLL per Liste und ID funktioniert übrigens auch soweit ich das sehe.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#26

Re: Gleiche DLL im selben Prozess mehrfach laden?

  Alt 5. Jul 2008, 07:24
Nachtrag zum Thema BPL's: Ja, sie sind Compiler-spezifisch. Schade.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 10:25 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