Frage

Verwenden von Visual C ++ 2008 Express Edition. Ich Verknüpfung meiner Anwendung mit einer Importbibliothek (.lib) für eine DLL, die Macht oder nicht auf dem Zielsystem vorhanden sein könnte. Bevor Sie fragen:. Ich kann die DLL mit meiner Anwendung verteilen

Wenn die DLL nicht vorhanden ist, sobald ich eine Funktion aus der DLL aufrufen (aber nicht früher!), Erhalte ich eine Meldung wie

  

Diese Anwendung konnte nicht gestartet werden, weil SomeLibrary.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben.

Was ich stattdessen passieren soll, ist, dass die Anwendung erkennt, dass der DLL nicht da ist, und einfach Funktionalität deaktiviert, die davon abhängt. Ich kann einen Anruf zu LoadLibrary machen und sehen, ob es gelungen, aber ich bin mir nicht sicher, ob dies ausreicht. Vielleicht ist die Import-Bibliothek macht mehr Arbeit hinter den Kulissen?

Ist ein einfacher LoadLibrary Anruf ausreichend? Wenn nicht, was muss ich sonst noch tun? Kann dies auch getan werden?

Aktualisieren : Natürlich kann ich LoadLibrary und dann GetProcAddress für jede der Funktionen, die ich verwenden soll. Aber das ist ein Streit, und ich hatte gehofft, dass zu vermeiden und verwenden Sie einfach die mitgelieferte Importbibliothek statt.

War es hilfreich?

Lösung

Dies ist, was die delayload-Linkoption ist für, aber ich weiß nicht, ob die Express Edition unterstützt es.

Andere Tipps

Nein, LoadLibrary() ist genau das, was Sie wollen. Die einzige Folge es zu verwenden ist der Aufwand für die Einstellung der Funktionszeiger in die DLL, wenn Sie erfolgreich die DLL laden, aber der Prozess dafür ist, an anderer Stelle im Netz gut abgedeckt.

Wenn Sie Check hier ( MSDN) Sie werden sehen, dass, wenn LoadLibrary Laden fehlschlägt, wird die Funktion einen NULL-Wert zurückgibt, und Sie können sogar den spezifischen Fehler überprüfen (, dass eine Datei nicht gefunden werden sollte) GetLastError Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top