Zugriff auf Klasse in einer DLL
-
Hi,
ich benötige mal wieder eure Hilfe.Ich hab ein MFC-Programm gemacht un dmöchte jetzt auf eine DLL zugreiffen.
Die DLL ist recht einfach.
eine Funktion ("Funktion"), eine Variable ("variable") und eine Klasse ("class object").Ich mach dann folgendes:
typedef int (CALLBACK* Func)(void); typedef int* (Var); Func Krahni_Funktion; Var Krahni_Variable; int egal(void) { HINSTANCE hLib = AfxLoadLibrary("DLL.DLL"); if(hLib) { Krahni_Funktion = (Func)GetProcAddress(hLib, "Funktion"); if(Krahni_Funktion) { Krahni_Funktion(); } else { AfxFreeLibrary(hLib); } Krahni_Variable = (Var)GetProcAddress(hLib, "Variable"); if(Krahni_Variable) { int sicher = *Krahni_Variable; } else { AfxFreeLibrary(hLib); } } }Das klappt auch alles wunderbar.
Nur wie bekomm ich jetzt zugriff auf die Klasse?Danke für jede Hilfe
Gruss
Dragon Fire
-
Linke die DLL doch statisch.
Sonst müsstest du die genauen Methodennamen kennen.
-
ich wollts gern dynamisch machen.
Die genauen Namen kenn ich.
-
AFAIK können nur MFC-DLLs Klassen exportieren. Diese DLLs können dann aber auch nur MFC-Programme verwenden.
-
Mit Win32-DLLs geht das nicht? Dann kann ich ja lange rumprobieren...
Hat einer ne Ahnung warum das so ist?
-
Mit Win32-DLLs geht das nicht? Dann kann ich ja lange rumprobieren...
Hat einer ne Ahnung warum das so ist?
Wenn ich aber ein neues Projekt anlege Win32-DLL mit der angebe "Eine DLL, die einige Symbole exportiert" passiert folgendes....
er legt ne Variable, eine Funktion und ne Klasse an.
Warum ne Klasse wenn er sie eh nicht exportieren kann? Also kann ich klassen nur innerhalb der DLL verwenden?
-
Die Klasse wird natürlich exportiert, wenn da EXPORT davorsteht.
Aber das Exportieren von Klassen läuft dann über dermaßen komische Krücken, das bringt dir nicht wirklich was.
Du kannst die DLL dann nämlich nur mit dem MS-Compiler (evtl. nur in einer bestimmten Version) verwenden. Bei anderen Compilern klappen die Krücken nicht nicht mehr und du musst die dekorierten Methodennamen in Erfahrung bringen und und und....
-
Und bei MFC-DLLs geht das besser? Oder ist es generell nichts geschickt Klassen in DLL's zu lagern?
Mich würde trotzdem mal interressieren wie das funktioniert...
-
-
Man kann auch Klassen in DLL dynamisch laden.
Einfach erklärt: Ein exportierte Funktion erstellt eine Instanz der Klasse und diese wird bei GetProcAdress abgeholt".
Solltest du das jetzt nicht verstehen dann lass es da dies nicht der normale Weg ist.
Die MFC geht davon aus, daß Exportierte Klassen statisch eingebunden werden.