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

pad*_*igf 3 c++ dll mfc visual-studio-2010

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

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

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

任何想法如何找到触发 dll 加载的内容,或如何找到全局变量?

pad*_*igf 5

我通过在延迟加载辅助函数__delayLoadHelper2. 可以在以下位置找到此功能:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\delayhlp.cpp
Run Code Online (Sandbox Code Playgroud)

当加载标记为延迟加载的 dll 时调用它。

我设置了断点__delayLoadHelper2并在它被击中时查看了调用堆栈。这显示了我的代码中触发 dll 加载的函数。

它是由全局单例构造函数触发的,该构造函数从 dll 创建了一个类型。这段代码在CWinApp::InitApplication().