Funktion einer DLL Explizit laden
-
Hallo,
ich möchte gerne eine Funktion aus einer DLL explizit laden. Es will nur einfach nicht funktionieren... Ich habe mir mehrfach das Beispiel von MSDN angeschaut und viele einfache, aber es funktioniert einfach nicht!
Hauptprogramm:
main.cpp:#include "main.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) { typedef int (*POPUP)(); HINSTANCE hDLL; POPUP knut; hDLL = LoadLibrary("MeinDll.dll"); if(hDLL == NULL) { MessageBox(NULL, "Konnte Downloader.dll nicht laden!", "Fehler", MB_OK); return -1; } knut = (POPUP) GetProcAddress(hDLL, "popUp"); if(!knut) { MessageBox(NULL, "ERROR~~~~", "Fehler", MB_OK); FreeLibrary(hDLL); return -1; } knut(); FreeLibrary(hDLL); return 0; }main.h:
#include <windows.h>DLL-Quelltext:
meineDll.cpp:#include "meineDll.h" int popUp() { MessageBox(NULL, "Text\nViel viel Test ;)", "Blub", MB_OK); return 0; }meineDll.h:
#include <windows.h>Beide Programme sind gebaut und ich habe die DLL und die EXE in den selben Ordner gepackt -- keine Kompilierfehler. Ausgeführt und ich bekomme immer mein Popup mit ERROR~~~.
Ich gehe also davon aus, dass ich irgendwo einen Fehler habe mit dem Zugriff auf die Funktion, aber ich habe echt keine Ahnung mehr, woran es liegen könnte.

Wisst ihr, was ich falsch gemacht habe?
Danke,
Gruß
Squall
-
Wo exportierst Du denn die Funktion in der DLL?
Verwendet dazu bitte eine DEF-Datei, sonst gibt es unschöne Namen.
Um dies zu verifizieren verwende
http://www.dependencywalker.com/
damit Du prüfen kannst, ob der Funktionsnamen wirklich so heisst, wie Du ihn *vermutest*!
-
DLLs sind für mich komplettes Neuland und ich weiß nicht, wie du das meinst mit "exportieren der Funktion in der DLL".
DEF-Dateien? Also im Debug-Ordner (Visual C++ 6) nichts zu finden. Was bringen die?
Mit Depencywalker habe ich einige Funktionsnamen gesehen, die ich so benutzen könnte, aber ich habe nicht den Namen meiner Funktion popUp gefunden.
-
Du musst dem Compiler/Linker sagen, welche Funktion auch von ausserhalb der DLL verfügbar sein sollen. Dies kann man auf unterschiedliche Arten machen. Bevorzugt sind dabei DEF-Dateien (gidf.de), da man hierbei den Namen der Funktion korrekt angeben kann.
Auch solltest Du nicht unbedingt einen 10 Jahre alten Compiler/IDE verwenden...