我没有运气将 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] /cdn-cgi/l/email-protection stdcall';
但是,当我运行安装程序时,出现错误:
Cannot Import dll: <utf8>MyDLL.dll.
我究竟做错了什么?
由于您没有在函数导入中使用延迟加载,因此 Inno Setup 加载程序无法运行,因为它没有找到您的库。这是因为在函数导出之前检查函数导出是否可用。InitializeSetup
事件已触发,因此您的库尚未从存档中提取。
在你的情况下添加delayload http://jrsoftware.org/ishelp/topic_scriptdll.htm以正确的方式导入选项。但是,如果您添加,您可以省略手动解压并告诉安装程序为您解压库files:
库文件名之前的前缀。这个前缀是documented http://jrsoftware.org/ishelp/topic_scriptdll.htm as:
在安装过程中,还可以使用特殊的“文件:”前缀来指示
设置自动从 [Files] 中提取一个或多个 DLL
加载第一个 DLL 之前的部分。
您的案例中的整个导入可以缩短为:
[Files]
Source: "MyDLL.dll"; Flags: dontcopy
[Code]
procedure Foo;
external 'Foo@files:MyDLL.dll stdcall delayload';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)