Inno安装程序无法导入DLL

问题描述 投票:3回答:2

我没有将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 '[email protected] stdcall';

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

Cannot Import dll: <utf8>MyDLL.dll.

我在做什么错?

delphi dll inno-setup
2个回答
8
投票

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

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

在安装过程中,特殊的'files:'前缀也可以用于指示设置为从[文件]自动提取一个或多个DLL。加载第一个DLL之前的部分。

您的情况下,整个导入可以缩短为:

documented

3
投票

我在导入上使用documented发布此问题后立即找到了解决方案...

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

[Code]
procedure Foo;
  external 'Foo@files:MyDLL.dll stdcall delayload';
© www.soinside.com 2019 - 2024. All rights reserved.