DLL erstellen
-
Hi,
ich versuche gerade eine DLL zu erstellen... und werde dabei gerade wahnsinnig.
1. Man kann eine .dll doch mit LoadLibary laden und mit FreeLibary wieder freigeben.
Aber wie nutze ich die darin enthaltenen Funktionen?
Wie greife ich auf ein Struct in einer DLL zu?
Was macht bitte GetProcAddress?2. Ich will eine DLL erstellen, welche einfach nur 5 Funktionen hat.
Ich habe weder Zeit noch lust mich jetzt 3 Wochen mit dem OOP-Prinzip mit Klassen usw. zu befassen.
Ich will nur einfach die 5 Funktionen in eine DLL packen, damit niemand den Code sieht, wenn ich es weitergebe.Hier ein Beispiel von dem Code, ich habe natürlich mehr Funktionen, aber im Prinzip würde es mir helfen, wenn ich wüsste, wie ich daraus eine DLL mache und wie ich sie dann auch nutzen kann.
(Mir ist eigentlich relativ egal, ob die DLL dann zu Laufzeit geladen werden kann, oder nicht.
Hauptsache der Anwender sieht den Code nicht und kann es ohne großes hin und her in eine Anwendung einbinden. )struct DriveInfo{ CString szLaufwerk; //Laufwerksbuchstabe, z.B. A:\ CString szLaufwerkTyp; //Laufwerkstyp, z.B. "Wechseldatenträger" CString szHardware; //Hardware zu dem Laufwerk, z.B. "IBM DTLA-XXXX Hard Disk Drive" }; DriveInfo drive[26]; int DetectDriveLetters(void){ //Verwendet GetLogicalDrives() um die aktuellen Laufwerke zu finden. //Schreibt szLaufwerk und szLaufwerkTyp in das struct // Gibt die Anzahl der Laufwerksbuchstaben zurück; } bool DetectHardware(int drv){ //Findet die Hardware die zu dem Laufwerk in drive[drv] gehört aus der Registry von Windows. //Schreibt szHardware in das Struct //True bei Erfolg }
Anmerkungen:
1. Ich kenne die MSDN - GetProcAdress steht zwar drin, aber ich verstehe nicht was es macht.
2. Ich will nicht über das OpenSource Konzept diskutieren. Der Code soll in der DLL verborgen sein
3. Bücher habe ich 3 Stück da. Ich verstehe in keinem das DLL Kapitel.
(Bereits bei "Erweiterter DLL", "MFC-DLL" und "Standard-DLL" ist Schluss, ich versteh da gar nix mehr.)Ich bin für jede Hilfe dankbar, ich brauche die DLL nächste Woche für einen Kunden.
mfg
trequ
-
Servus,
schau mal ein paar Tuts durch. Ich gebe dir mal ein bisschen Quellcode dazu. Bin aber ehrlich gesagt zu faul dir jetzt jeden Schritt zu erklären
Bsp:
static HINSTANCE hinstDLL; typedef int (STDAPICALLTYPE *p_DetectDriveLetters)(); p_DetectDriveLetters DetectDriveLetters; hinstDLL = LoadLibrary((LPCTSTR) "katzenklo.dll"); DetectDriveLetters = (p_DetectDriveLetters)GetProcAddress(hinstDLL, "DetectDriveLetters"); // Dann nur noch DetectDriveLetters();
Sollte funzen. Habs nicht getestet. Habe im Moment keine Entwicklungsumgebung, geschweige denn einen Compiler.
*winke*
Hellsgore
-
Hallo,
Hellsgore schrieb:
static HINSTANCE hinstDLL; typedef int (STDAPICALLTYPE *p_DetectDriveLetters)(); p_DetectDriveLetters DetectDriveLetters; hinstDLL = LoadLibrary((LPCTSTR) "katzenklo.dll"); DetectDriveLetters = (p_DetectDriveLetters)GetProcAddress(hinstDLL, "DetectDriveLetters"); // Dann nur noch DetectDriveLetters();
Kann mir vorstellen das das funktionieren könnte.
Bleiben mir noch 2 Fragen, ohne die ich nicht weiterkomme:
1. Wie packe ich die Funktionen und das Struct in eine DLL?
Erst wenn ich eine DLL habe, kann ich testen, ob ich auch an den Inahalt komme.
Und genau hier finde ich keine brauchbaren Erklärungen. 90% aller Erklärungen lassen keine CStrings zu.
Jedes dieser Beispiele endet immer mit einem Fehler beim Kopilieren, weil CString unbekannt ist.2. Das Struct DriveInfo wird von DetectDriveLetter() mit Informationen gefüllt. Wie greife ich auf die Informationen zu? Wie komme ich wieder an das Struct ran, wenn es in der DLL ist?
mfg
trequ