Funktionen und Variablen + DLL-Dateien
-
Ich möchte in meiner DLL-Datei globale Variablen und globale Funktionen meines Hauptpogramms nutzen. Ich habe schon versucht, die HauptPogramm-Header-Datei in meine DLL-Datei zu includieren.
Dann kennt die DLL-Datei zwar meine Klassendefinitionn, aber meine globalen Funktionen und Variablen kennt das Pogramm nicht!!! Weiß jemand, was ich ändern sollte?
danke,
Chrissi
-
Warum schreibst du eigentlich dann eine DLL? Wenn ich das richtig verstanden habe, dann wirst du sie nie ohne dein Hauptprogramm nutzen können. Für mich macht dann die ganze DLL keinen Sinn mehr.
Wenn ich das richtig verstanden habe, soll doch eine DLL ein unabhängiges Modul sein, welches portabel ist. Korrigiere mich, wenn ich falsch liege.Maffe
-
Nee, das ist für mein Spiel; die Figur und die Landschaft-Klasse. Jedes wird anders gerendert. Dabei sollten auch andere Leutz Figuren und Landschaften erstellen: Die Lösung: DLL(Module). Dafür brauch ich aber Variablen/Figuren meiner CGame-Klasse, wie z.B. Den Zeiger auf die Landschaft bei den Figuren, das View-Frustum und die Standart-Figur-Klasse (die Funktionen, die bei jeder Figur ausgeführt werden müssen.) ...
Hoffe es gibt doch eine Lösung für mein Problem,
Cu,
Chrissi
-
Hmm, naja, dann.
Genauso wie eine DLL Funktionen, etc. exportieren kann (__declspec (dllexport) <myfunc mit param>), können auch Variable, etc. importiert werden.
Ich hab das noch nie gemacht, aber ich denke, dass wenn du deine Funktionen, etc. in deiner Anwendung so kenntzeichnest müsstest du sie in die DLL importieren können.
Eine Frage noch. Bindest du explizit oder implizit?
-
Ähm, du musst wissen, dass ich das vorher (auch) noch nicht gemacht habe.
Was meinst du mit:
Eine Frage noch. Bindest du explizit oder implizit?
Ich suche am Anfang meines Pogrammes alle DLL-Dateien in einem Ordner, lade dann eine GetInfo-Funktion usw...
Und wie importiert man Variablen? Davon habe ich noch nie gehört....
Danke,
Chrissi
-
Hab jetzt noch mal ein bisschen nach gelesen: Natürlich; ich binde explizit. Dazu sind die Daten, die ich importieren, nicht in einer DLL-Datei sondern in einer EXE-Datei...
Hoffe es gibt doch Hilfe für mein Prob,
Danke,
Chrissi
-
Gut zu wissen.
So ich schreib dir mal ein Beispiel, wie ich ne Funktion aus einer DLL exportiere. Das lässt sich auch auf eine Variable anwenden. Allerdings steht in MS Windows Programmierung für Experten, dass man davon die Finger lassen soll und lieber Funktionen exportieren soll, mit denen man sich die Werte der Variablen übergeben lässt. Ich weiss zwar nicht genau warum, aber ich habe mich bis jetzt immer daran gehalten.
//DLL.cpp int myFunc (char *myString, int myInt) { <code> return <was auch immer>; } <andere Funktionen>
Du siehst schon in der cpp der DLL kannst du ganz normal schreiben.
//DLL.h #ifndef DLL_H #define DLL_H #define DLLEXPORT extern "C" __declspec (dllexport) DLLEXPORT int myFunc (char *, int ); <andere Fkt.köpfe> #endif
Jetzt kommt die Anwendung, die diese Fkt laden soll.
//App.cpp void main () { HINSTANCE hDLL = LoadLibrary ("DLL"); . . . typedef int (*TmyFunc) (char *, int ); TmyFunc pmyFunc = NULL; pmyFunc = (TmyFunc) GetProcAddress (hDLL, "myFunc"); //kann sein das es auch "_myFunc" ist int Result = pmyFunc (String, 5); . . . }
Meine Idee ist jetzt, wenn du es genauso in deiner Anwendung machst, wie ich in der DLL.h, dann müsstest du eigentlich Variablen etc. importieren können.
Hoffe konnte helfen,
Maffe