delphi - 无法在动态链接库 <dll> 中找到过程入口点 <function>

标签 delphi delphi-xe

我已经转换了所有 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.

我已确保:

  1. DLL 与应用程序存储在同一目录中
  2. 我声明的函数存在(我得到了用 VB.NET 编写的源代码)

我该如何修复此错误?

提前谢谢您。

最佳答案

我发现您存在以下问题:

  1. 该函数已按序号而不是名称导出。您需要在 Delphi 代码中指定序数。
  2. 第一个参数应该是 PAnsiChar 而不是 Delphi 字符串。 VB 代码使用字符串指示编码器传递以 null 结尾的字符串。根据经验,在 DLL 导入或导出中包含 Delphi 托管的类似字符串的类型几乎总是错误的。
  3. 最终参数通过引用传递。这是一个 Delphi var 参数。
  4. 我认为返回值应该是 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/

相关文章:

delphi - 访问 Delphi 类的严格保护属性?

xml - Delphi XML 数据绑定(bind)错误 : "Unknown datatype"

delphi - 从 120 更新到 Indy 130 软件包,现在此代码不起作用

forms - 显示另一个表单时防止出现主表单

delphi - 如何将 TStringGrid 从 Delphi 7 转换为 Delphi XE

delphi - 在 DelphiXE 中禁用表单设计器

delphi - 在油漆盒上绘图 - 如何及时跟上鼠标的移动?

listview - 如何更改 TListView 中 "Swipe Delete"按钮的文本 - Delphi FireMonkey?

Delphi-如何获取目录中所有文件的列表

delphi - delphi中有一个UIntToStr可以让你显示UINT64值,但是StrToUInt在哪里允许用户输入64位无符号值呢?