4 Stimmen

DelayLoading einer DLL und der zugehörigen .lib-Datei

Ich versuche, das Laden von wintrust.dll und crypt32.dll in meiner Anwendung zu verzögern (diese werden verwendet, um digitale Signatur/Veröffentlichungsprüfungen in einer DLL durchzuführen). Ich verwende VS2008. Nach dem Hinzufügen dieser beiden DLLs als Einträge in der Delay Load-Eigenschaft im Linker-Abschnitt meiner Projekteigenschaften, erhalte ich immer noch LNK4199 Warnungen, dass nichts von der DLL geladen wurde und LNK2019 Fehler nicht in der Lage, Symbole wie WinVerifyTrust aufzulösen.

Durch Hinzufügen der folgenden Einträge zu den zusätzlichen Abhängigkeiten wurde dieses Problem behoben: crypt32.lib und wintrust.lib. Jetzt gibt es keine Probleme mehr beim Linken. Ich frage mich jedoch, wie ich sicherstellen kann, dass dies nicht mit der statischen Bibliothek verknüpft wird? Ich möchte wegen möglicher Lizenzierungsprobleme nicht mit der statischen Bibliothek verknüpfen. Ich möchte die DLLs, die in Windows installiert sind, dynamisch laden und hatte gehofft, dass DelayLoad mir dabei helfen könnte, ohne auf die Funktionsaufrufe LoadLibrary und GetProcAddress zurückgreifen zu müssen.

Für Informationen über die verschiedenen Möglichkeiten der Bibliotheksnutzung und -verknüpfung wären wir Ihnen sehr dankbar!

Merci.

3voto

casablanca Punkte 68114

Das verzögerte Laden befreit Sie nicht davon, einen Link auf die Lib-Datei zu setzen. Normalerweise werden DLLs geladen, sobald Ihre Anwendung startet. Das verzögerte Laden verzögert dies nur bis zum ersten Aufruf einer Funktion aus dieser DLL. In jedem Fall müssen Sie eine Verknüpfung mit der Lib-Datei herstellen, damit der Linker überprüfen kann, ob die Funktionen, die Sie aufrufen, tatsächlich in der DLL vorhanden sind.

Wenn Sie nicht auf die Bibliotheksdateien verlinken wollen, ist Ihr einziger Ausweg die Verwendung von LoadLibrary y GetProcAddress .

3voto

Hans Passant Punkte 894572

Für diese gibt es keine statische .lib. Die SDK-Bibliotheken sind immer Importbibliotheken, keine statischen .libs, da die entsprechende Windows-API in einer DLL lebt. Darüber brauchen Sie sich keine Gedanken zu machen.

2voto

Michael Burr Punkte 320591

Ein Tool, mit dem Sie feststellen können, ob die Verknüpfung so funktioniert, wie Sie es erwarten, ist DependecyWalker: http://www.dependencywalker.com/ - Im Falle von Verzögerungslasten werden diese mit einem speziellen Symbol gekennzeichnet.

0voto

Joshua Rodgers Punkte 5147

Sie sollten sich die Win32-API-Methoden ansehen LoadLibrary y GetProcAddress .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X