Laden einer dll, nur wie
-
Ich versuche gerade ein kleines Programm zu schreiben, welches nichts anderes machen soll, alls eine DLL-Datei zu laden. Unter WinXP/2k wird diese DLL über eine einfache Batch-Datei geladen (game.dll Param1 Param2 Param3). Nur unter WinME geht das leider nicht.
Mein bisheriger Versuch:
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ if(!LogInit()) return 1; hInstance = LoadLibrary(lpCmdLine); if(!hInstance){ Log("Fehler beim Laden der Library"); return 2; } if(!GetProcAddress(hInstance, "DLLMain")){ Log("Fehler beim laden der Programmadresse"); return 4; } if(!FreeLibrary(hInstance)){ Log("Fehler beim Schließen der Library"); return 3; } Log("Erfolgreich abgeschlossen"); return 0; }So gehts offenbar nicht... Nur wie soll ich es machen?
-
Hi,
lass mal den Inhalt von lpCmdLine vor dem Laden der Dll anzeigen (Log())
Der Code stimmt ansonsten schon:HMODULE hLibrary = LoadLibrary("C:\\Test.dll"); if(!hLibrary) { Log("dll wurde nicht gefunden"); return 2; } if(GetProcAddress(hLibrary, "ExportierteFunktion") == NULL) { Log("Die Funktion \"ExportierteFunktion\" wurde nicht gefunden"); FreeLibrary(hLibrary); return 3; } FreeLibrary(hLibrary); return 0;Grüße Rapha
-
Habe mich wohl etwas falsch ausgedrückt.
Das Laden der DLL funktioniert einwandfrei (LoadLibrary). Das Problem ist, dass er die DLLMain-Funktion nicht findet. Versuche ich mir die exportierten Funktionen der DLL (z.B. mit Dependency Walker) anzuzeigen, wird keine aufgelistet... Also wohl keine exportierten Funktionen.
Dennoch funktioniert es besagte DLL über die Windows-XP-Eingabeaufforderung direkt aufzurufen. Da dies bei Win9x/ME nicht geht, wollte ich dies über ein Programm lösen. Ob es überhaupt mit LoadLibrary gemacht werden kann, weiß ich nichtmal. Es war nur der 2. Ansatz, nachdem ShellExecute mich nicht weitergebracht hat und jeamnd in einem anderen Forum meinte, es müsse doch über LoadLibrary gehen.
-
Ähm? Ich dachte, unter WinME geht das Laden der DLL nicht? Hast du doch selbst geschrieben?
-
Wo liegt diese DLL in WinXP?
-
Damit meinte ich, dass das Laden der DLL über eine Batch-Datei wie bei WinXP nicht geht.

Nehmen wir mal an die DLL heiße game.dll und liege auf C:\ .
Dann sieht die dazugehöre Batch-Datei unter WinXP/2k so aus:
game.dll [Para1] [Para2] [Para3]Das will ich jetzt in einem Programm machen und nicht über eine Batch-Datei.
-
Das eine Mal schreibst du "Es geht." und das andere Mal, geht es wieder nicht. Was denn nun?

Grundsätzlich, zum expliziten Laden einer DLL benutzt man LoadLibrary. An die exportierten Funktionen der DLL kommst du über GetProcAddress.
Hast du die DLL selbst geschrieben?
-
Also irgendwie hab ich das laden einer dll in ner Batch-Datei oder über die Eingabeaufforderung noch nie gesehen

Was machst du denn da genau? Wird die irgendwie an nen Prozess gehängt oder ist das Fall was ich mir denke: die DLL ist ne exe mit .dll endung und startet ihreen eigenen Prozess. In dem Fall würde ich mal nen Versuch mit CreateProcess starten.
-
bzgl.
Versuche ich mir die exportierten Funktionen der DLL (z.B. mit Dependency Walker) anzuzeigen, wird keine aufgelistetim dll projekt:
-neue textdatei mit endung .def dem projekt hinzufügen
folgendes reinschreiben:LIBRARY "meinedll"
DESCRIPTION 'bla bla bla'EXPORTS
DLLMainfunzts jetzt?
-
@Maffee01: Mit "Das Laden der DLL funktioniert einwandfrei" meinte ich die Funktion LoadLibrary(xxx) gibt einen gültigen Handle zurück.
@CMatt: Es ist wohl einfach eine umbenannte EXE-Datei... Im anderen Forum musste ich mich aber belehren lassen, dass das wohl doch eine DLL wäre, was mich dann vollkommen verwirrt hat... Im Hex-Editor angeschaut, sieht es aber wie eine EXE aus und lässt sich auch "starten", wenn man sie umbenennt.
Habe es jetzt gerade nochmal mit CreateProzess versucht und tausend dank. Das war es.
Klappt wunderbar.