我已经转换了所有 VB.NET DLL 声明
Declare Function SFileOpenArchive Lib "Storm.dll" Alias "#266" (ByVal lpFileName As String, ByVal dwPriority As Integer, ByVal dwFlags As Integer, ByRef hMPQ As Integer) As Boolean
进入德尔福。
function SFileOpenArchive(lpFileName: String; dwPriority, dwFlags, hMPQ: Integer): Boolean; stdcall; external 'Storm.dll';
但是,当我调用函数并编译程序时,出现以下错误:
The procedure entry point SFileOpenArchive could not be located in the dynamic link library Storm.dll.
我已确保:
- DLL 与应用程序存储在同一目录中
- 我声明的函数存在(我得到了用 VB.NET 编写的源代码)
我该如何修复此错误?
提前谢谢您。
最佳答案
我发现您存在以下问题:
- 该函数已按序号而不是名称导出。您需要在 Delphi 代码中指定序数。
- 第一个参数应该是 PAnsiChar 而不是 Delphi 字符串。 VB 代码使用字符串指示编码器传递以 null 结尾的字符串。根据经验,在 DLL 导入或导出中包含 Delphi 托管的类似字符串的类型几乎总是错误的。
- 最终参数通过引用传递。这是一个 Delphi var 参数。
- 我认为返回值应该是 BOOL,但这可能不会给您带来麻烦。
将它们放在一起,如下所示:
function SFileOpenArchive(lpFileName: PAnsiChar;
dwPriority, dwFlags: Integer; var hMPQ: Integer): BOOL;
stdcall; external 'Storm.dll' index 266;
请注意,我不能 100% 确定文本编码是 ANSI。然而,对您来说主要的障碍是序数导入。我希望我已经为你澄清了这一点。我相信您可以解决剩余的细节。
关于delphi - 无法在动态链接库 <dll> 中找到过程入口点 <function>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886675/