C++ DLL dynamisch nachladen

Sheeep

Lt. Junior Grade
Registriert
Juli 2007
Beiträge
272
Hi Jungs,

ich würde gerne eine Dynamic Link Library dynamisch zu laden.
ich hab also mein compiliertes projekt, also eine .exe datei. im gleichen ordner hab ich einen weiteren ordner, der dll_files heißt. in diesem ordner befinden sich jetzt verschiedene dlls.
je nach hardwarekonfiguration des ausführenden computers, muss eine andere dll geladen werden. die hardwarekonfiguration möchte ich nun zur laufzeit abfragen, und die entsprechende dll laden.
ich hab gesehen, es gibt für den msvc die funktion LoadLibrary("name"), mit der in beispielen aber immer nur eine funktion geladen wird...
kann ich auch eine vollständige dll laden? wenn die dll im gleichen ordner ist, dann funktioniert dass ja auch automatisch. nur dann kann ich nicht hardwarespezifisch die dll laden.
hat einer nen vorschlag wie ich das machen kann?

betriebsystem ist windows 7, compiler der msvc.

MFG Sheeep
 
Na die Funktion läd schon die komplette Bibliothek. Und die Funktionen, die du benötigst, musst du dir einzeln da raus holen.
 
wenn ich jetzt ne dll im system32 ordner oder direkt bei der .exe datei habe, dann brauch ich die funktionen ja nicht einzelt zu laden,
kann ich das nicht so auch auf den ordner verlinken?

MFG Sheeep
 
wenn ich 2 dlls habe die gleich heißen, die eine lib1.dll und die andere lib2.dll nenne, findet das programm dann noch die funktionen?

aber selbst wenn, woher soll das program wissen, welche dll zu der hardware passt, wenn sie die gleichen funktionen enthalten?
 
Ganz einfach: Du benutzt den dynamischen Loader und lädst nur die Bibliothek, die du benötigst. Durr.
 
Sheeep, ich glaube, normalerweise, wenn man in einem C++-Programm eine DLL benötigt, gibt es ja eine .lib-Datei, gegen die man sein Programm linkt (und natürlich einen Header, der die Deklarationen der in der DLL vorhandenen Funktionen / Klassen / etc. enthält). Durch das einlinken dieser .lib-Datei verpaßt der Linker dem fertigen Programm dann irgend wie den nötigen Code, die DLL gleich beim Programmstart zu laden. Das nennt man glaube ich "statisches Laden" der DLL., und das wahrscheinlich der gängigere Weg. Wenn Du diesen Weg nutzt, dann mußt Du Dich nicht darum kümmern, jede Funktion einzeln aus der DLL herauszuziehen, und LoadLibrary() und GetProcAddress() kannst Du links liegen lassen.

Du hingegen hast Dich für das dynamlische Laden der DLL entschieden, und da mußt Du eben leider schon jede Funktion, die Du benötigst, mit GetProcAddress() einzeln aus der DLL holen.

Hast Du Dir schon die MSDN Doku zum Thema DLLs ( http://msdn.microsoft.com/en-us/library/ms682589(v=VS.85).aspx ) durchgelesen? Vielleicht kann das Helfen, alle bei Dir noch bestehenden Klarheiten zu beseitigen. ;)
 
Ich hab sie gelesen, bevor ich den Thread aufgemacht habe und gehofft einer weiß eine "angenehmere" Lösung.

Aber danke für eure Hilfe.
 

Ähnliche Themen

Zurück
Oben