AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mehrfache instanzen einer DLL laden, wie geht das?

Mehrfache instanzen einer DLL laden, wie geht das?

Ein Thema von QuickAndDirty · begonnen am 11. Sep 2006 · letzter Beitrag vom 11. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2   
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.925 Beiträge
 
Delphi 12 Athens
 
#1

Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 11:16
Ok ich arbeite an einer DLL , diese DLL soll von mehreren
Anwendung verwendet gestartet werden.

Ich meine zu wissen DLL nur einmal von windows
in den Speicher geladen werden muss und das dann alle
Anwendungen darauf Zugriff haben.
Wenn das so ist. Wie kann ich dafür sorgen das meine Anwendungen
sich die DLL jedes mal neu und nur für sich in den Speicher laden?

Macht LoadLib das bereits so wie ich's brauche?
Ich glaube in der SDK-Hilfe stand das Loadlib (edit: vorher freelib) nur den Refcount auf die DLL erhöht.

Was muss ich tun?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 11:21
das ist doch der Sinn einer DLL, daß sie nur einmal geladen wird und nur einmal Speicher verbraucht.
Warum willst du die DLL exclusiv für dein Programm laden?
Zitat:
Macht LoadLib das bereits so wie ich's brauche?
Nein.
Zitat:
Ich glaube in der SDK-Hilfe stand das Freelib nur den Refcount auf die DLL erhöht.
Der RefCount müsste erniedrigt werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 11:34
innerhalb eines Prozesses wird eine DLL nur einmal in den Speicher geladen und ansonsten wir die Referenz erhöht. Aber das eine DLL für alle Prozesse nur einmal geladen wird ist mir neu. Dann könnte ja ein Programm einen wert in der DLL ändern und alle anderen Programme greifen dann auf die Änderung zu.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.925 Beiträge
 
Delphi 12 Athens
 
#4

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 11:35
Ich mappe funktionen der Standard Session von DbTables.
kann aber mal sein das 2 Anwendungen unterschiedliche Sessions
brauchen. In meinem Falle zwar nicht, aber glaube das dürfte auch
ein Problem mit der thread Sicherheit geben.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
hoika

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

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 11:39
Hallo,

der Code steht nur einmal im Speicher,
bei den Daten, sofern globale Variablen verwendet werden,
kommt es darauf an.

Früher ... gab es mal eine "shared data" Anweisung (c++),
die es erlaubte, Daten zwischen Prozessen auszutauschen.

Sowas sollte man nicht tun.

Ich glaube mich zu erinnern, dass jetzt (ab NT?) jeder Prozess
standardmäßig sein eigenes Datensegmant besitzt.

Prinzipiell würde ich in einer DLL keine Daten ablegen,
dass kann man den Prozeduren und Funktionen der DLL auch übergeben.

Heiko
Heiko
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.925 Beiträge
 
Delphi 12 Athens
 
#6

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 12:03
@hoika und Mkinzler: Wer von euch hat recht?
Werden also Globale Variablen wie das Session objekt in der DbTables
für jede Anwendung gesondert geführt. Der Code aber geteilt?
ich will noch darauf hinweisen das ich die Sharemem unit verwende
und so wie ich die verstehe übernimmt dann Borlandmm.dll die
Heapverwaltung.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
rosseaux

Registriert seit: 12. Aug 2004
Ort: Mönchengladbach
3 Beiträge
 
Delphi XE3 Professional
 
#7

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 12:22
Indem man einen eigenen DLL Loader schreibt, wie ich es getan habe, siehe http://www.delphigl.com/forum/viewto...8dbcc191bab3ec oder auf http://bero.0ok.de/
BeRo (ein 0ok+farbrausch Member)
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#8

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 12:31
Die DLLs werden einmal "real" geladen und in die verschiedenen Prozesse, welche sie benötigen "eingespiegelt".

Die Prozesse ansich bemerken davon nichts, bzw. es spielt für sie keine Rolle.
Wenn du nun rangehst und am Codesegment deiner Dll rumfummelst, wird eine komplette Kopie erstellt (copy on write).

Die Variablen der einzelnen DLL- Instanzen sind logischerweise nicht miteinander verbunden, da sie im Speicher der verschiedenen Prozesse angelegt sind.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 12:35
Zitat:
@hoika und Mkinzler: Wer von euch hat recht?
Beide, da ich dich falsch verstanden habe. Der Code der DLL wird nur einmal geladen, der Datenteil existiert aber für jede Instanz.
Markus Kinzler
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.925 Beiträge
 
Delphi 12 Athens
 
#10

Re: Mehrfache instanzen einer DLL laden, wie geht das?

  Alt 11. Sep 2006, 12:46
@Rosseau: wirklich gut was du da auf die Beine gestellt hast, aber nicht das passende für mich, glaube ich (müste man ja erst ausprobieren).

@VJAY: danke das hört sich gut an. Nach einigem Nachdenken glaube ich das es dann auch egal ist was borlandmm.dll macht.
Was genau meinst du mit am Datenteil Rumfummeln?
Ich gebe in der regel alles was ich mit dem DBTables.Session Objekt machen will an eine DLL Funktion. Welche die Manipulation
dann vornimmt. also ist der einezige der an dem Objekt "rumfummelt" die DLL, oder? Ausserdem greife ich ja au nur lesend
darauf zu, das Objekt wird im initalization teil von DbTables in der DLL erzeugt.

@mKinzler: ja, es fehlt mir eine Funktion die das Was ich meine auch aufschreibt
Ansonsten gut zu wissen das ich mir wohl fast Sorgen machen muss.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:59 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