在C ++程序(MFC)中查找加载dll的位置

时间:2016-06-27 17:40:05

标签: c++ visual-studio-2010 dll mfc

我有大型遗留C ++应用程序(Visual Studio 2010),我需要在加载特定dll之前执行一些代码。问题是在我执行任何代码之前dll正在加载,所以我试图弄清楚是什么导致它被加载。

我在链接选项中为dll指定了/ DELAYLOAD,这应该在需要之前停止dll加载。但是在我执行任何代码之前它仍然被加载。该应用程序是MFC,因此我的入口点是对CWinApp :: InitApplication()的重写。

我怀疑它必须是应用程序中引用dll中的类型的全局变量,但我不确定如何找到变量(代码库很大,并且全局变量不一致地命名)。

如何找到触发dll加载的内容或如何查找全局变量?

1 个答案:

答案 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()之前执行。