exportierte Klasse dynamisch in Anwendung aufrufen?
-
Weder unsterstützt der Standard irgendwie DLLs noch sind DLLs unter Windows irgendwie dafür geeignet, Klassen zu exportieren.
Es gibt Lösungen für Visual C++ und C++Builder, aber die beschränken sich nur auf diese Compiler -> Frag in den Compiler-Foren.
-
Was genau verstehst du unter dynamsich exportiert?
Wenn du nur im C++ Forum gesucht haben solltest, versuch es nochmal im WinAPI Forum.
-
...oki ich suche nochmal
ich möchte die DLL mit LoadLibrary laden...
mfg Kay
-
Such einfach mal und wenn du nix findest, schreib nochmal, dann schreib ich dir was.
Aber du müsstest eigentlich was finden, weil ich das Thema erst vor ein, zwei Monaten erfragt hatte.
-
...zu LoadLibrary kann ich nur in Zusammenhang mit Funktionen finden, das ist mir aber ziemlich klar.
Nun nochmal zu der Klasse. In der DLL gibt es eine Klasse die ich mit dem EXPORT-Makro nach aussen sichtbar mache. Was muss ich jetzt in der Anwendung genau tun, damit ich die Klasse aus der DLL in der Anwendung verwenden kann? Ich möchte aber wie schon erwähnt die DLL mit Loadlibrary laden, und nicht statisch hinzulinken.mfg Kay
-
DLL + Klassen -> nicht gut! Eine DLL sollte nur C-Funktionen exportieren.
Siehe Suchfunktion (COM?).Wenn du es trotzdem unbedingt willst (ich bin dagegen):
1. Die Namen der Methoden sind total verwurschtelt. Öffne die DLL im Dependency Walker und schau dir die Namen an.
2. Die Aufrufkonvention ist auch anders als bei normalen Funktionen, du darfst nicht vergessen den this-Zeiger zu übergeben. Wie der allerdings übergeben wird ist Compilerabhängig (das sind Klassen in DLLs übrigens auch).
-
Hi,
mmh, dann muss ich wohl mein Konzept nochmal überdenken...
mfg Kay
-
... Danke!
-
Es ist im Endeffekt aber gar kein Problem mit Klassen in DLL´s zu arbeiten und dieses DLL ist nur für C-Fkt ist imho ein Gerücht das sich hartneckig hält.
Was du brauchst um eine Klasse in eine DLL zu bringen ist ausser der Klasse eine extern "C" Methode die ebenfalls in der DLL schlummert und bei Aufruf eine Instanz der Klasse zurückliefert. Diese Methode ist sozusagen der Einsprungpunkt in die DLL.
-
...die DLL ist nicht das Problem, ich hab nur Schwierigkeiten in der Anwendung welche mit LoadLibrary die DLL lädt.
Für den Fall, dass ich eine Funktion aus einer DLL laden will, muss ich doch ersmal einen Funktionszeiger definieren, wie dieser für eine Klasse und deren Memberfunktionen definiert wird ist mir nicht klar... Kann jemand mal ein Codeschnipsel posten?mfg Kay
-
Drakos@work schrieb:
Es ist im Endeffekt aber gar kein Problem mit Klassen in DLL´s zu arbeiten und dieses DLL ist nur für C-Fkt ist imho ein Gerücht das sich hartneckig hält.
Das ist kein Gerücht.
DLLs wurden nie für Klassen entworfen. Ihre Spezifikation wurde nie erweitert, um Klassen zu unterstützen.
Das geht wie schon gesagt nur mit compilerspezifischen Krücken, die alles andere als optimal sind.Drakos@work schrieb:
Was du brauchst um eine Klasse in eine DLL zu bringen ist ausser der Klasse eine extern "C" Methode die ebenfalls in der DLL schlummert und bei Aufruf eine Instanz der Klasse zurückliefert. Diese Methode ist sozusagen der Einsprungpunkt in die DLL.
Entweder alles oder nichts. Wenn der Konstruktor eine extern "C" Variante ist, muss man auch noch für jede andere Methode der Klasse eine entsprechende C-Funktion bereitstellen.
Alles in allem: Es lohnt sich nicht.