ich arbeite jetzt schon mehrere Wochen an einem Problem
bezüglich DLLs und komme einfach nicht weiter. Die MSDN Hilfe
hat mir zwar am Anfang geholfen, ich bin mittlerweile aber an
einem Punkt angelangt, an dem nichts mehr geht. Vielleicht
könnt Ihr mir ja weiter helfen!
Du erwähnst leider nicht, wie weit du gekommen bist und woran es jetzt genau hapert.
Mein Problem ist also, dass ich Funktionen aus einer DLL
aufrufen will, die ich selbst nicht geschrieben habe. Typ,
Name und Übergabeparameter der Funktionen sind bekannt.
Hast du auch eine h-Datei bzw. die h-Dateien zur DLL? Wenn nein, warum nicht? Besorg sie dir! Hast du eine lib-Datei? Es gilt das gleiche.
Unter Windows funktioniert dynamisches Linken so:
- Man kompiliert die lib-Datei zum eigenen Projekt hinzu (als „additional dependency“ oder so ähnlich kann man sie im Studio bei den Linkereinstellungen hinzufügen). In ihr steht vorkompilierter Code, der in die Einsprungpunkte der DLL springen kann.
- Man inkludiert die h-Datei, damit der Compiler auch von den vorhandenen Funktionen weiß und man sie aus eigenem Code aufrufen kann.
Alternativ könnte man auch die DLL mit API-Funktionen selbst dynamisch laden, dann über weitere API-Funktionen Funktionspointer auf die DLL-Einsprungspunkte anfordern und ab da diese verwenden. Das ist die „ekligere“ Lösung. Ich habe sowas zwar schon gesehen, aber noch nicht selbst getan, kann also auch keine Tips geben. Google vielleicht nach „load dynamic dll function pointer“ oder soetwas.
Wenn
ich DLLs selbst schreibe ist das alles kein Problem, auch das
Einbinden in Visual Studio. Was muss man also anders machen im
Vergleich dazu?
Gar nichts eigentlich. Du nimmst, wie bei der eigenen DLL, die h-Datei und die lib-Datei zu deinem Projekt hinzu.
(Wie) kann mann außerdem einen Entry Point verwenden, um eine
Funktion in einer DLL aufzurufen?
Wenn man über h-Datei + lib-Datei geht, muss man sich darüber keinen Kopf machen. Beim Laden der DLL über API-Calls schon irgendwie, aber das möchte man eigentlich nicht.
Viele Grüße,
Sebastian