Funktionen fest binden oder dynamisch laden?

Hallo Leute!

Scheinbar habe ich die Wahl, ob ich in MS Visual C eine Funktion z.B. aus MPR.LIB vom Linker hinzufügen lasse
oder, ob ich sie zur Laufzeit über „LoadLibrary(„MPR.DLL“); …GetProcAddress(…);“ lade.

Hat die zweite (recht umständliche) Methode Vorteile?

Wenn ich sicherstellen will, daß eine Software möglichst wenige Voraussetzung an ein Zielsystem stellt (ich weiss nicht, welche Windows-Version und welche Bibliotheken in welcher Version vorhanden sind), welche Methode sollte ich dann am sinnvollsten verwenden?

CU
Markus

Wenn ich sicherstellen will, daß eine Software möglichst
wenige Voraussetzung an ein Zielsystem stellt (ich weiss
nicht, welche Windows-Version und welche Bibliotheken in
welcher Version vorhanden sind), welche Methode sollte ich
dann am sinnvollsten verwenden?

Dann natürlich statisch linken, d. h. der Linker fügt die benötigten Funktionen zur ausführbaren Datei hinzu. :o)

Grüße, Robert

Wenn ich sicherstellen will, daß eine Software möglichst
wenige Voraussetzung an ein Zielsystem stellt (ich weiss
nicht, welche Windows-Version und welche Bibliotheken in
welcher Version vorhanden sind), welche Methode sollte ich
dann am sinnvollsten verwenden?

Dann natürlich statisch linken, d. h. der Linker fügt die
benötigten Funktionen zur ausführbaren Datei hinzu. :o)

Hallo Robert!

Das scheint mir eigentlich auch die sinnvollere Möglichkeit. Was aber passiert, wenn einzelne Funktionen zu meinem Programm gebunden werden, für die es im Zielsystem keine Unterstützung gibt (beispielsweise kein Netzwerk installiert)?

Beim dynamischen Laden kann ich prüfen, ob die DLL verfügbar ist. Falls nicht, wird diese Funktion deaktiviert. Läßt sich dieses Verhalten auch bei statischer Bindung erreichen?

CU
Markus

Das scheint mir eigentlich auch die sinnvollere Möglichkeit.
Was aber passiert, wenn einzelne Funktionen zu meinem Programm
gebunden werden, für die es im Zielsystem keine Unterstützung
gibt (beispielsweise kein Netzwerk installiert)?

Hmmmm, in der Form AFAIK nicht.

Allerdings würde ich um bei dem Beispiel des Netzwerkes zu bleiben nicht aus dem Vorhandensein einer DLL auf das Vorhandensein eines Netzwerkes schließen.

Ich denke, dass dir in den meisten Fällen das API das du mit der DLL verwendest die Möglichkeit gibt das zu prüfen, im Falle des Netzwerkes z. B. über ein Abfragen vorhandener Netzwerk-Interfaces.

Grüße, Robert

Hallo Robert!

Habe noch zwei Threads in Newsgroups zu diesem Thema gefunden:

http://groups.google.com/groups?hl=de&threadm=863mlc…
http://groups.google.com/groups?hl=de&threadm=7q6ugg…

Offenbar ist es nicht immer so, daß das Verwenden einer .LIB Datei garantiert, daß der Code der FUnktion integriert wird. Einige .LIBs enthalten nur Code, der wiederum die entsprechende DLL nachlädt :frowning:

CU
Markus