gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:15:14 25 4
gpt4 key购买 nike

我需要在我们的主应用程序中使用第 3 方 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编码的相同内容(在同一台电脑上)并且它有效:但是什么delphi 不行吗? :我在同一个 dll 上调用同一个 LoadLibrary 函数!

当我使用 ProcMon 进行监视时,我看到 3rdparty dll 已加载,并且 3rdparty dll 的 dependentand dll 也已加载。 : 所以windows肯定能找到DLL。但在某个地方加载过程失败了:当我尝试使用 LoadLibraryEX 和 DONT_RESOLVE_DLL_REFERENCES 或 LOAD_LIBRARY_AS_DATAFILE 加载 DLL 时,它也可以工作(但我当然不能调用所需的函数...)

我没有主意了:希望你们能进一步帮助我......

谢谢。克里斯托夫

最佳答案

这有效吗?

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 ,其中我得到了完全意外的被零除错误,这是通过将控制字的“除以零”位设置为 1 来处理的。

关于Delphi Loadlibrary 返回 0 (LastErrorcde=3221225616) 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com