我有大型遗留C ++应用程序(Visual Studio 2010),我需要在加载特定dll之前执行一些代码。问题是在我执行任何代码之前dll正在加载,所以我试图弄清楚是什么导致它被加载。
我在链接选项中为dll指定了/ DELAYLOAD,这应该在需要之前停止dll加载。但是在我执行任何代码之前它仍然被加载。该应用程序是MFC,因此我的入口点是对CWinApp :: InitApplication()的重写。
我怀疑它必须是应用程序中引用dll中的类型的全局变量,但我不确定如何找到变量(代码库很大,并且全局变量不一致地命名)。
如何找到触发dll加载的内容或如何查找全局变量?
答案 0 :(得分:4)
我通过在delay-load helper函数__delayLoadHelper2
上设置断点来解决问题。此功能可在以下位置找到:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\delayhlp.cpp
在加载标记为延迟加载的dll时调用它。
我在__delayLoadHelper2
中设置了断点,并在被调用时查看了调用堆栈。这显示了我的代码中触发dll-load的函数。
它是由全局单例构造函数触发的,它从dll创建了一个类型。此代码在CWinApp::InitApplication()
之前执行。