我没有将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.
我在做什么错?
由于您没有在函数导入中使用延迟加载,因此Inno Setup加载器由于未找到您的库而无法运行。这是因为在触发InitializeSetup
事件之前执行了函数导出是否可用的检查,因此您的库尚未从归档中提取。
您的情况是正确添加delayload
导入选项。但是,如果在库文件名之前添加delayload
前缀,则可以省略手动提取,并告诉安装程序为您提取库。该前缀为files:
,如下:
在安装过程中,特殊的'files:'前缀也可以用于指示设置为从[文件]自动提取一个或多个DLL。加载第一个DLL之前的部分。
您的情况下,整个导入可以缩短为:
documented
我在导入上使用documented
发布此问题后立即找到了解决方案...
[Files]
Source: "MyDLL.dll"; Flags: dontcopy
[Code]
procedure Foo;
external 'Foo@files:MyDLL.dll stdcall delayload';