Klasse aus einer DLL über .def exportieren
-
Wie kann ich eine Klasse aus der DLL exportiren?
Für Variablen und Funktionen habe ich das geschafft.
Nur wenn ich den Klassenbezeichner in die .def-Datei eintrage bekomme ich einen Linkerfehler..h
#ifdef VC6DLL_EXPORTS #define VC6DLL_API __declspec(dllexport) #else #define VC6DLL_API __declspec(dllimport) #endif // Diese Klasse ist aus vc6dll.dll exportiert class VC6DLL_API CVc6dll { public: CVc6dll(void); // ZU ERLEDIGEN: Fügen Sie hier Ihre Methoden hinzu. }; extern VC6DLL_API int nVc6dll; VC6DLL_API int fnVc6dll(void);.cpp
#include <windows.h> #include "vc6dll.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } // Dies ist ein Beispiel für eine exportierte Variable VC6DLL_API int nVc6dll=1234; // Dies ist ein Beispiel für eine exportierte Funktion. VC6DLL_API int fnVc6dll(void) { return 42; } // Dies ist der Konstruktor einer Klasse, die exportiert wurde. // see vc6dll.h for the class definition CVc6dll::CVc6dll() { return; }.def
; Reg321.def : Deklariert die Modul-Parameter für die DLL. LIBRARY "vc6dll" DESCRIPTION 'none' EXPORTS ;Funktionsname ;Beschreibung fnVc6dll ;Variablen nVc6dll DATA ;Klassen CVc6dllDanke
-
Du musst dir decorated names angeben. Viel Spass dabei

-
Ok, hast du auch ein Beispiel parat?
-
Du exportierst doch schon die Klasse durch das "__declspec(dllexport)"! Warum willst Du es dann noch in der DEF-Datei anageben???
-
Ich will später die DLL bei bedarf zur Laufzeit in meinem Programm laden und entladen.
int (__stdcall* FUNKTION)(void); FUNKTION=(int(__stdcall*)(void))GetProcAddress(hDLL,"fnVc6dll");
-
Zur Laufzeit Klassen dynamisch laden geht nur sehr eingeschränkt und wird zumindest nicht offiziell supported.
Mach Dir ein reines C-Interface, dann hast Du die ganzen Probleme nicht...
-
Komisch, mit ner struct hatte es an einer struct hatte es aber an einer anderen stelle funktioniert.
ich such das mal raus und poste es hier.
-
Du brauchst es nicht posten... ich hatte nicht gesagt das es nicht geht... sondern nur sehr eingeschränkt... mit Vererbung hast Du vermutlich noch nicht so viel gemacht...
-
Jochen Kalmbach schrieb:
Du brauchst es nicht posten... ich hatte nicht gesagt das es nicht geht... sondern nur sehr eingeschränkt
Ich habe es gefunden. Ich habe dabei aber nicht die Klasse sonder nur eine Instanz von ihr exportiert.
Jochen Kalmbach schrieb:
... mit Vererbung hast Du vermutlich noch nicht so viel gemacht...
Doch, wieso?