Windows 7 Windows 7下的Inno安装程序5.5.4(a),错误为“;无法导入dll";

Windows 7 Windows 7下的Inno安装程序5.5.4(a),错误为“;无法导入dll";,windows-7,inno-setup,dllimport,Windows 7,Inno Setup,Dllimport,我需要使用两个dll执行一个serup应用程序: 在pas脚本中,使用compinstkey.dll调用aspr_ide.dll。 我在iss脚本中做了: [Files] Source: aspr_ide.dll; DestDir: {app};Flags: ignoreversion Source: CompInstKey.dll; DestDir: {app}; Flags: ignoreversion .... [Code] .... function GetRegistrationKey

我需要使用两个dll执行一个serup应用程序: 在pas脚本中,使用compinstkey.dll调用aspr_ide.dll。 我在iss脚本中做了:

[Files]
Source: aspr_ide.dll; DestDir: {app};Flags: ignoreversion
Source: CompInstKey.dll; DestDir: {app}; Flags: ignoreversion
....
[Code]
....
function GetRegistrationKeys: PAnsiChar;
external 'GetRegistrationKeys@files:aspr_ide.dll stdcall';

procedure Installinfo(ApplicationName, Version, UserName, Key: PAnsiChar);
  external 'Installinfo@files:CompInstKey.dll stdcall';
....
function InitializeSetup: Boolean;

begin
 Result := False;
 ExtractTemporaryFile('aspr_ide.dll');
 ExtractTemporaryFile('CompInstKey.dll');
end;
.....
在WindowsXP中,它工作正常,但Windows7确实抛出错误“无法导入dll:C:…\Temp\tp.GHPtmp\aspr\u ide.dll”。安装暂停时,此时aspr_ide.dll位于“C:…\Temp\tp.GHPtmp\”处


我错了什么?为什么不在Windows7下运行呢?如何更正它?

您应该在函数声明中使用
delayload
关键字,例如:

function GetRegistrationKeys: PAnsiChar;
external 'GetRegistrationKeys@files:aspr_ide.dll stdcall delayload';

procedure Installinfo(ApplicationName, Version, UserName, Key: PAnsiChar);
  external 'Installinfo@files:CompInstKey.dll stdcall delayload';

delayload使安装程序仅在调用DLL时加载,而不是在启动时加载,如中所述

首先,我建议您将Inno更新到版本5.5.9,它的bug最少。第二,在Win7系统上重新编译DLL,因为依赖XP和Win7的动态库中的DLL可能不同