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

Delphi Loadlibrary返回0(LastErrorcde = 3221225616)这是什么意

发布时间:2020-12-15 09:44:18 所属栏目:大数据 来源:网络整理
导读:我需要在我们的主应用程序中使用第三方dll.当我静态链接到提供的DLL它工作正常,我可以DLL导出函数. 但我们不希望我们的主应用程序在启动时依赖于此DLL,所以我尝试在需要时动态加载DLL: DLLHandle := LoadLibrary('3rdparty.dll');ret := GetLastError();if
我需要在我们的主应用程序中使用第三方dll.当我静态链接到提供的DLL它工作正常,我可以DLL导出函数.
但我们不希望我们的主应用程序在启动时依赖于此DLL,所以我尝试在需要时动态加载DLL:

DLLHandle := LoadLibrary('3rdparty.dll');
ret := GetLastError();
if DLLHandle = 0 then
begin
  err := SysErrorMessage(ret);
  Writeln(err);
end //...

但确实不起作用:LoadLibrary函数返回0并且LastErrorcode是3221225616.因为我不知道我做错了什么我尝试在c中编码的相同(在同一台PC上)并且它可以工作:但是什么不是它与delphi一起工作? :
我在同一个dll上调用相同的LoadLibrary函数!

当我使用ProcMon监视时,我看到第三方dll被加载,并且第三方dll的dependand dll也被加载. :所以Windows肯定会找到DLL.
但在某处它加载过程失败了:
当我尝试使用带有DONT_RESOLVE_DLL_REFERENCES或LOAD_LIBRARY_AS_DATAFILE的LoadLibraryEX加载DLL时,它也可以工作(但是我不能在场外调用所需的函数……)

我没有想法:希望你们能帮助我…

thx in adv.
克里斯托夫

解决方法

这有用吗?

var
  SavedCW: word;

...

SavedCW := Get8087CW;
Set8087CW(SavedCW or $7);
DLLHandle := LoadLibrary('3rdparty.dll');
Set8087CW(SavedCW);
if DLLHandle = 0 then
begin
  ret := GetLastError();  
  err := SysErrorMessage(ret);
  Writeln(err);
end //...

一些讨论:

在询问Google时,错误代码3221225616似乎是无效浮点运算的结果.现在,这似乎非常技术性;实际上,加载库与浮点计算有什么关系呢?浮点控制字(CW)是一个位域,其中位指定处理器应如何处理浮点错误;实际上,通过将这些位中的一个更改为1(顺便说一下是默认状态)可以处理意外的浮点错误.有关另一个例子,请参见this question of mine,其中我得到一个完全意外的除零误差,通过将控制字的“div by zero”位设置为1来处理.

(编辑:李大同)

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

    推荐文章
      热点阅读