Ich habe große Legacy-C++ - Anwendung (Visual Studio 2010), und ich muss etwas Code ausführen, bevor eine bestimmte DLL geladen wird. Das Problem ist, dass die DLL geladen wird, bevor ich irgendeinen Code ausführe, also versuche ich herauszufinden, was das Laden auslöst.Finden Sie, wo DLL geladen wird in C++ - Programm (MFC)
Ich habe DELAYLOAD für die DLL in den Link-Optionen angegeben, die das Laden der DLL stoppen sollte, bevor es benötigt wird. Aber es wird immer noch geladen, bevor ich irgendeinen Code ausführe. Die Anwendung ist MFC, also ist mein Einstiegspunkt eine Überschreibung von CWinApp :: InitApplication().
Ich vermute, dass es eine globale Variable in der Anwendung sein muss, die auf einen Typ in der DLL verweist, aber ich bin mir nicht sicher, wie die Variable zu finden ist (die Codebasis ist groß und Globalen werden nicht konsistent benannt).
Irgendwelche Ideen, um zu finden, was die DLL-Last auslöst, oder wie man die globale Variable findet?
Suchen Sie nach 'LoadLibrary'-Aufrufen, oder laden Sie implizit' #pragma comment (lib ...) 'Zeilen. – PaulMcKenzie
@PaulMcKenzie: Das OP sucht nach DLLs, die geladen werden, bevor ein Benutzercode ausgeführt wird. 'CWinApp :: InitApplication' ist das moralische Äquivalent von C's' main'. Das OP sucht weder nach expliziten LoadLibrary-Aufrufen, noch sucht es nach Linker-Direktiven (sie wissen bereits, dass die Bibliothek verknüpft ist). Sie suchen nach dem Grund, warum eine Delay-Load-Bibliothek geladen wird, obwohl anscheinend noch kein Export erfolgt ist. – IInspectable
Sie könnten die delay-load * -Helferfunktion * außer Kraft setzen und prüfen, welche Symbole das Laden der DLL auslösen. Siehe https://msdn.microsoft.com/en-us/library/09t6x5ds(v=vs.100).aspx. – dxiv