gpt4 book ai didi

delphi - Inno Setup 无法导入 DLL

转载 作者:行者123 更新时间:2023-12-03 15:38:59 31 4
gpt4 key购买 nike

我无法将 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 加载程序无法运行,因为它没有找到您的库。这是因为在触发 InitializeSetup 事件之前会检查函数导出是否可用,因此您的库尚未从存档中提取。

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

During Setup, a special 'files:' prefix may also be used to instruct Setup to automatically extract one or more DLLs from the [Files] section before loading the first DLL.

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

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

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

关于delphi - Inno Setup 无法导入 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435282/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com