Dlls
-
Habe 3 wichtige Fragen zu Dlls:
- Kann man auch Klassen aus einer Dll exportieren, oder nur Funktionen?
Wenn ja, wie? - Wie kann man aus einer Dll heraus Funktionen im Programm selbst aufrufen?
- Sind globale Variablen in Dlls auch für das Programm global und wenn man sie
verändert sind sie dann auch für andere Progrmme verändert?
- Kann man auch Klassen aus einer Dll exportieren, oder nur Funktionen?
-
--- schrieb:
Habe 3 wichtige Fragen zu Dlls:
- Kann man auch Klassen aus einer Dll exportieren, oder nur Funktionen?
Wenn ja, wie?
Kann man, sollte man aber nicht. Zumindest gilt das in Delphi. Ich denke, mit C++ sollte es ähnlich sein.
- Wie kann man aus einer Dll heraus Funktionen im Programm selbst aufrufen?
Siehe MSDN: LoadLibrary und GetProcAdress.
- Sind globale Variablen in Dlls auch für das Programm global und wenn man sie verändert sind sie dann auch für andere Progrmme verändert?
Nein, da jedes Programm die DLL in seinen Adressbereich eingeblendet bekommt. Es sei denn du legst die Variabeln im SharedMemory an.
- Kann man auch Klassen aus einer Dll exportieren, oder nur Funktionen?
-
Danke Luckie
Zu 1):
muss ich jede Methode einzeln als export declarieren oder kann ganz die ganze klasse als export declarieren
und wieso sollte man das nicht?
Tut zum Thema wäre sehr hilfreich
-
--- schrieb:
und wieso sollte man das nicht?
Afaik musst du dann eben alles mit dem selben Compiler machen, sonst gibt es Probleme / funktioniert nicht. Wenn dir das aber egal ist, dann wüsste ich jetzt nicht, warum man es nicht machen sollte

-
__declspec(dllexport) class Alpha { . . . };
-
ok danke
-
Doch noch ne kleine Frage:
Wie lade ich dann die Klasse
Ich meine bei Functionen ist es anscheinend GetProcAdress aber bei Klassen ?
-
mach ne funktion die ein zeiger auf ein objekt zurückgibt!
Alpha* CreateAlpha() { return new Alpha(); }
-
@alpha woher weis dann der client code wie die definition von alpha aussieht?
besser fände ich eine abstrakte basisklasse in deinem code in etwa so.
// base.h class Base { virtual void DoIt() = 0; }; // dll.h class Foo : public Base { void DoIt() { } }; extern "C" __declspec(dllexport) void GetPlugin(Base **ppOutput) { *ppOutput = new Foo; }
-
ich meinte es so wie du es geschrieben hast. danke.
-
Achsoooo
-
"abstrakte Basisklasse"??
könnte mir das jemand erklären?
reicht es nicht ein header für die dll zu haben?