我创建了一个混合DLL(C ++ / CLI),在从一个普通的ANSI C应用程序成功调用它之后,我继续从C ++ COM服务器调用它(使用相同的C入口点)。但是,即使在COM服务器成功启动或调用DLL之前,我在ntdll.dll中也会遇到“访问冲突”。调用堆栈只有ntdll.dll!ExecuteHandler2重复多次,直到在VS调试输出中报告堆栈溢出。我可以看到我的混合模式DLL和mscoree.dll已加载。
我将混合的DLL添加到COM服务器的延迟加载的DLL选项中,它似乎可以工作。
为什么我编写的C应用程序似乎在没有延迟加载的情况下正常工作时,需要在C ++ COM服务器中加载混合DLL?我该如何调试这个问题(除非这是预期的,但我找不到任何相关内容)?