Inno Setup 5.5.4(a)在Windows 7下出现错误“无法导入dll”

我需要用几个dll来做一个serup应用程序:在pas-script中,使用compinstkey.dll来调用aspr_ide.dll。 我在iss-script中做过:

[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;
.....

在Windows XP中它工作正常,但Windows7确实会抛出错误“无法导入dll:C:... Temp tp.GHPtmp aspr_ide.dll”。 在暂停安装时,aspr_ide.dll存在于“C:... Temp tp.GHPtmp ”中。

我错了什么? 为什么不在Windows 7下运行? 我该如何纠正它?


你应该在函数声明中使用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';

如http://www.jrsoftware.org/ishelp/index.php?topic=scriptdll中所述,延迟加载导致安装程序仅在调用DLL时才加载DLL,而不是在启动时加载。

链接地址: http://www.djcxy.com/p/7747.html

上一篇: Inno Setup 5.5.4(a) under Windows 7 with mistake "cannot import dll"

下一篇: Handle DLL search with two similar Windows applications