2 instanzen einer DLL
-
Hallo.
Ich muss in meiner Software mehrere instanzen von einer DLL erstellen.
Nur wie mach ich sowas. Dass es mit Statischeim einbinden nicht geht ist klar.
Aber reicht es, wenn ich 2x die Funktion LoadLibrary ausführe ?
-
Janz Kerber schrieb:
Ich muss in meiner Software mehrere instanzen von einer DLL erstellen.
?? Wieso das denn?
-
Hallo,
Wenn du die Dll einmal geladen hast, existiert doch ein Handle auf diese Dll (Rückgabewert von LoadLibrary). Dieses Handle ist solange gültig, bis FreeLibrary aufgerufen wird. Du brauchst es also nur weiterzureichen.
Außerdem hat eine Dll keine Instanzen.
-
Nun ja, eigentlich schon. Für jede aufrufende Anwendung wird doch ein eigenständiges Datensegment bereitgestellt. Vielleicht will er ja 2 Datensegmente in seiner Anwendung nutzen. Hab ich mich aber noch nicht mit beschäftigt, deswegen weiß ich nicht, ob oder wie so etwas geht.
-
Naja, das dll-Modul wird entsprechend oft in den Speicherbereich des aufrufenden Prozesses gemappt (mit Reference-Counting). FreeLibrary zählt dann entsprechend runter bis 0 erreicht wird, dann wird das Mapping aufgehoben. Ich würde das halt nicht als Instanz bezeichnen (kann man vielleicht aber machen).
Ich seh bloß den Sinn von Mehrfachmappings nicht ein. Der Speicherbereich gehört dir ja sowieso schon.
Das sieht mir eher so aus, als ob im Design des programmes was nicht hinhaut.
-
Ach ja, den Handle für ein bereits gemapptes Modul bekommt man mit GetModuleHandle()
-
Hallo
der Sinn einer DLL ist es, Funktionen und Typen/Klassen einmalig für alle Anwendungen bereit zu stellen.
Wenn du von einem Typ/Klasse in der DLL zwei Instanzen brauchst, solltest du in deiner Anwendung selber dann zwei Instanzen davon erstellen.bis bald
akari
-
Joe_M. schrieb:
Nun ja, eigentlich schon. Für jede aufrufende Anwendung wird doch ein eigenständiges Datensegment bereitgestellt. Vielleicht will er ja 2 Datensegmente in seiner Anwendung nutzen.
Eine DLL ist kein Datenspeicher!
-
Autsch. Ich fürchte, ich sollte meinen Arbeitgeber bitten, mir diesen Monat nur ein halbes Gehalt auszuzahlen. Mehr hab ich einfach nicht verdient.
