【发布时间】:2012-05-13 05:37:01
【问题描述】:
我创建了一个混合 DLL (C++/CLI),在从普通的 ANSI C 应用程序成功调用它之后,我继续从 C++ COM 服务器调用它(使用相同的 C 入口点)。然而,即使在 COM 服务器成功启动或调用 DLL 之前,我也会在 ntdll.dll 中收到“访问冲突”。调用堆栈只是让 ntdll.dll!ExecuteHandler2 重复多次,直到在 VS 调试输出中报告堆栈溢出。我可以看到我的混合模式 DLL 和 mscoree.dll 已加载。
我将混合 DLL 添加到 COM 服务器的延迟加载 DLL 选项中,它似乎可以工作。
为什么我写的 C 应用程序似乎可以正常工作而没有延迟加载时,混合 DLL 需要在 C++ COM 服务器中延迟加载?我该如何调试这个问题(除非这是预期的,但我找不到任何相关信息)?
【问题讨论】:
-
听起来像LoaderLock,DllMain运行时无法加载CLR。使用 Debug + Exceptions, Throw 复选框捕获异常。