Inno安装程序无法导入DLL

我没有任何运气将Delphi DLL导入Inno Setup(Unicode)。 该DLL有一个简单的过程..

procedure Foo(); stdcall;
begin

end;

exports
  Foo;

该DLL包含在安装程序源中,并添加到文件列表中:

[Files]
Source: "MyDLL.dll"; Flags: dontcopy

然后,我在初始化中提取这个DLL:

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('MyDLL.dll');
end;

最后,在脚本中声明了这个过程:

function DoFoo(): Bool;
  external 'Foo@MyDLL.dll stdcall';

但是,当我运行安装程序时,出现错误:

Cannot Import dll: <utf8>MyDLL.dll.

我究竟做错了什么?


由于您未在函数导入中使用延迟加载,所以Inno Setup loader无法运行,因为它没有找到您的库。 这是因为检查函数导出是否可用是在InitializeSetup事件触发之前执行的,因此您的库尚未从存档中提取。

在你的情况下是正确的方式添加delayload导入选项。 但是,如果您在库文件名之前添加files:前缀,则可以省略手动解压缩并告诉安装程序为您提取库。 此前缀documented为:

在安装过程中,还可以使用特殊的'files:'前缀来指示安装程序在加载第一个DLL之前从[Files]节自动提取一个或多个DLL。

您的案例中的整个导入可以缩短为:

[Files]
Source: "MyDLL.dll"; Flags: dontcopy

[Code]
procedure Foo;
  external 'Foo@files:MyDLL.dll stdcall';

我通过在导入上使用delayload发布此问题后找到了解决方案...

function DoFoo(): Bool;
  external 'Foo@MyDLL.dll stdcall delayload';
链接地址: http://www.djcxy.com/p/44521.html

上一篇: Inno Setup failing to import DLL

下一篇: Inno Setup: add GUI to connect to SQL