Jer*_*dge 3 delphi dll inno-setup
我没有运气将Delphi DLL导入Inno Setup(Unicode).DLL有一个简单的过程..
procedure Foo(); stdcall;
begin
end;
exports
Foo;
Run Code Online (Sandbox Code Playgroud)
DLL包含在安装程序源中,并添加到文件列表中:
[Files]
Source: "MyDLL.dll"; Flags: dontcopy
Run Code Online (Sandbox Code Playgroud)
然后,我在初始化中提取这个DLL:
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('MyDLL.dll');
end;
Run Code Online (Sandbox Code Playgroud)
最后,在脚本中声明了这个过程:
function DoFoo(): Bool;
external 'Foo@MyDLL.dll stdcall';
Run Code Online (Sandbox Code Playgroud)
但是,当我运行安装程序时,出现错误:
Cannot Import dll: <utf8>MyDLL.dll.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
由于您没有在函数导入中使用延迟加载,因此Inno Setup加载程序无法运行,因为它找不到您的库.这是因为检查函数导出是否可用是在InitializeSetup事件触发之前执行的,因此您的库尚未从存档中提取.
在您的情况下delayload,正确添加导入选项.但是,如果files:在库文件名之前添加前缀,则可以省略手动提取并告诉安装程序为您提取库.此前缀documented如下:
在安装过程中,还可以使用特殊的"files:"前缀来指示安装程序在加载第一个DLL之前从[Files]部分自动提取一个或多个DLL.
您的案例中的整个导入可以缩短为:
[Files]
Source: "MyDLL.dll"; Flags: dontcopy
[Code]
procedure Foo;
external 'Foo@files:MyDLL.dll stdcall';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3905 次 |
| 最近记录: |