Brauche Hilfe zu DLLs

Hallo,

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!

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. 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? Wie funktioniert die explizite Einbindung genau? In C++ bin ich noch nicht ganz fit, deshalb würde ich mich über etwas Code (und am besten eine Erklärung) dazu freuen! Wäre alternativ auch über Vorschläge in C dankbar.

(Wie) kann mann außerdem einen Entry Point verwenden, um eine Funktion in einer DLL aufzurufen?

Vielen Dank für Eure Antworten,
mfg Ben

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

Hallo Ben,

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. 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? Wie funktioniert die explizite Einbindung
genau? In C++ bin ich noch nicht ganz fit, deshalb würde ich
mich über etwas Code (und am besten eine Erklärung) dazu
freuen! Wäre alternativ auch über Vorschläge in C dankbar.

Normalerweise bekommt man die DLL und eine dazu passende Header-Datei.
Die Header-Datei wird, wie jede andere auch, mit #include im Source-Code eingebunden und die DLL muss dem Linker angegeben werden.

Welche Fehlermeldungen bekommst du konkret ?
Und welches VS benutzt du ?

MfG Peter(TOO)

Hallo,

danke für die beiden Antworten! Mir die Lib und DLL Dateien zu besorgen wird schwierig, deshalb bleibt mir dann nur die Lösung über eine API Funktion.

Nochmals Danke,
Viele Grüße,
Ben