我有一个大型的遗留c++应用程序(Visual Studio 2010),我需要在加载特定的dll之前执行一些代码。问题是dll在我执行任何代码之前被加载,所以我试图找出是什么触发它加载。
我已经在链接选项中为dll指定了/DELAYLOAD,它应该在需要之前停止dll加载。但在我执行任何代码之前,它仍然会被加载。应用程序是MFC,所以我的入口点是CWinApp::InitApplication()的重写。
我怀疑它必须是应用程序中的一个全局变量,在dll中引用一个类型,但我不确定如何找到变量(代码库很大,全局变量不一致命名)。
任何想法如何找到什么触发dll加载,或者如何找到全局变量?
我通过在延迟加载辅助函数__delayLoadHelper2
上设置一个断点来解决这个问题。这个函数可以在
C:Program Files (x86)Microsoft Visual Studio 10.0VCincludedelayhlp.cpp
在加载标记为delay-load的dll时调用。
我在__delayLoadHelper2
中设置了断点,并在遇到它时查看了调用堆栈。这显示了我代码中触发dll加载的函数。
它是由全局单例构造函数触发的,该构造函数从dll中创建了一个类型。此代码在CWinApp::InitApplication()
之前执行。