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