我有一个本机 DLL,它是另一个应用程序的插件(我对它的控制基本上为零)。一切都很好,直到我链接了一个额外的 .lib 文件(将我的 DLL 链接到另一个名为 的 DLL ABQSMABasCoreUtils.dll
)。此文件包含我想使用的父应用程序的一些附加 API。我什至没有编写任何代码来使用任何导出的函数,但只是在这个新的 DLL 中链接会导致问题。具体来说,当我尝试运行程序时出现以下错误:
应用程序未能正确初始化 (0xc0000025)。单击确定以终止应用程序。
我相信我在某处读到这通常是由于 DllMain 函数返回 FALSE。此外,以下消息将写入标准输出:
错误:在组件初始化之前尝试分配内存
我几乎 100% 确定此错误消息来自应用程序,而不是某种类型的 Windows 错误。
再看看这个(又名四处乱窜并翻转我知道的每个开关)我打开 /MAP 链接并在生成的 .map 文件中找到了这个:
0001:000af220 ??3@YAXPEAX@Z 00000001800b0220 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af226 ??2@YAPEAX_K@Z 00000001800b0226 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af22c ??_U@YAPEAX_K@Z 00000001800b022c f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af232 ??_V@YAXPEAX@Z 00000001800b0232 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
如果我使用“undname”取消装饰这些名称,它们会给出以下(相同的顺序):
void __cdecl operator delete(void * __ptr64)
void * __ptr64 __cdecl operator new(unsigned __int64)
void * __ptr64 __cdecl operator new[](unsigned __int64)
void __cdecl operator delete[](void * __ptr64)
ABQSMABasCoreUtils.dll
如果我没有任何引用此 DLL 的代码,我不确定我是否了解此 .map 文件中如何存在任何内容,或者为什么我的 DLL 甚至试图加载 ABQSMABasCoreUtils.dll。谁能帮我把这些信息放在一起,找出为什么这不起作用?对于它的价值,我已经通过“dumpbin”确认父应用程序导入ABQSMABasCoreUtils.dll
,所以无论如何它都会被加载。我也尝试过在我的 DLL 中延迟加载这个 DLL,但这并没有改变结果。
编辑
我已经仔细检查过,所有涉及的文件都是 64 位的。