加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – Inno安装程序无法导入DLL

发布时间:2020-12-15 09:07:39 所属栏目:大数据 来源:网络整理
导读:我没有运气将Delphi DLL导入Inno Setup(Unicode). DLL有一个简单的过程.. procedure Foo(); stdcall;beginend;exports Foo; DLL包含在安装程序源中,并添加到文件列表中: [Files]Source: "MyDLL.dll"; Flags: dontcopy 然后,我在初始化中提取这个DLL: funct
我没有运气将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导入选项.但是,如果添加文件,则可以省略手动提取并告诉安装程序为您提取库:库文件名之前的前缀.此前缀为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';

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读