加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Win32 DLL导入问题(DllMain)

发布时间:2020-12-16 03:47:30 所属栏目:百科 来源:网络整理
导读:我有一个本机DLL,它是一个不同应用程序的插件(我基本上没有控制权).一切都很好,直到我链接一个额外的.lib文件(将我的DLL链接到另一个名为ABQSMABasCoreUtils.dll的DLL).此文件包含我想要使用的父应用程序中的一些其他API.我甚至没有编写任何代码来使用任何导
我有一个本机DLL,它是一个不同应用程序的插件(我基本上没有控制权).一切都很好,直到我链接一个额外的.lib文件(将我的DLL链接到另一个名为ABQSMABasCoreUtils.dll的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中的任何内容可以存在于此.map文件中,或者为什么我的DLL甚至尝试加载ABQSMABasCoreUtils.dll如果我没有任何引用此DLL的代码.任何人都可以帮我把这些信息放在一起,找出为什么这不起作用?值得我通过“dumpbin”确认父应用程序导入ABQSMABasCoreUtils.dll,因此无论如何都会加载它.我也试过延迟加载我的DLL中的DLL,但这并没有改变结果.

编辑

我进行了双重检查,所涉及的所有文件都是64位.

解决方法

我刚才遇到了同样的问题.这是Abaqus API的问题,而不是加载DLLS.

我认为这是因为Abaqus API会覆盖new和delete函数(您似乎已经注意到了).如果在初始化Abaqus API之前在程序中调用new或delete,例如调用odb_initializeAPI();然后你得到了

错误:在组件初始化之前尝试进行内存分配

错误消息和程序崩溃.

在我的程序中,调用odb_initializeAPI();在第一个新解决问题之前.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读