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

时间:2012-10-14 21:24:58

标签: 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

进入Delphi。

function SFileOpenArchive(lpFileName: String; dwPriority, dwFlags, hMPQ: Integer): Boolean; stdcall; external 'Storm.dll';

但是,当我调用函数并编译程序时,我收到以下错误:

  

程序入口点SFileOpenArchive无法位于动态链接库Storm.dll中。

我确保:

  1. DLL存储在与应用程序相同的目录中
  2. 我声明的函数存在(我得到了用VB.NET编码的源代码)
  3. 我该怎么做才能解决此错误?

    先谢谢你。

1 个答案:

答案 0 :(得分:4)

我可以看到以下问题:

  1. 该函数已由序数而非名称导出。您需要在Delphi代码中指定序号。
  2. 第一个参数应该是PAnsiChar而不是Delphi字符串。 VB代码使用string来指示编组器传递以null结尾的字符串。根据经验,在DLL导入或导出中包含类似字符串的Delphi托管类似乎总是错误的。
  3. 最终参数通过引用传递。那是Delphi var参数。
  4. 我认为返回值应为BOOL,但这可能不会给您带来麻烦。
  5. 像这样把它们放在一起:

    function SFileOpenArchive(lpFileName: PAnsiChar; 
        dwPriority, dwFlags: Integer; var hMPQ: Integer): BOOL; 
        stdcall; external 'Storm.dll' index 266;
    

    请注意,我不是100%确定文本编码是ANSI。但是,您的主要障碍是序数导入。我希望我已经为你清除了这一点。我相信你可以解决剩余的细节。