当应用程序多次启动时,延迟加载 DLL:“异常 0xC06D007E:找不到模块”

dec*_*jau 5 c++ windows dll exception delay-load

我的应用程序在使用延迟加载 DLL 时遇到过间歇性崩溃的情况。我们在几个不同的调用堆栈中都看到了崩溃,但0xC06D007E: Module not found__delayLoadHelper2.

连续多次(连续)调用该进程时会引发异常。这是一个示例调用堆栈:

KERNELBASE.dll!RaiseException()  + 0x3d bytes   
MYDLL.dll!__delayLoadHelper2(const ImgDelayDescr * pidd=0x000000000012f650, __int64 (void)* * ppfnIATEntry=0x000000000012f570)  Line 331    C++
MYDLL.dll!__tailMerge_MyDelayLoadDLL_dll()  + 0x3f bytes    Unknown
MYDLL.dll!MyUserFunction()  Line 91 + 0x5 bytes C++
Run Code Online (Sandbox Code Playgroud)

C++ 应用程序使用 Delay Load DLL 来加载 .NET 代码。

发生崩溃的计算机是非常强大的机器(12核CPU,48G RAM),我不确定它是否对其有影响。但由于崩溃并不总是发生,因此它看起来像是竞争条件或资源问题。

这个论坛帖子描述了我的情况,但没有解决方案。

知道为什么会发生这种情况吗?

C J*_*son 0

我的应用程序也发生了同样的崩溃,并且调用堆栈也完全相同。然而,我的崩溃有所不同,因为本机 DLL 对另一个本机 DLL 具有延迟加载依赖性。

我永远不会延迟加载 .NET 程序集。.NET 程序集应该使用托管程序集加载器函数来加载。它们也不应该通过调用 LoadLibrary 来加载。

最后,我不确定导致崩溃的原因,但我会完全删除 .NET 程序集的延迟加载。