在DLL中调用外部函数时出现“访问冲突”错误(在unzipper.dll中解压缩)

时间:2016-06-10 13:15:17

标签: inno-setup pascalscript

我正在尝试使用我上传的.dll文件解压缩文件,但每当我从代码部分调用extract me程序时,我收到以下错误:

  

例外:
  地址025DA648的访问冲突。读取地址00000000。

步骤:

procedure unzip(src, target: AnsiString);
external 'unzip@files:unzipper.dll cdecl delayload';

procedure ExtractMe(src, target : AnsiString);
begin
  unzip(ExpandConstant(src), ExpandConstant(target));
end;

Code部分内拨打电话:

procedure UnzipFiles();
var
  NSSMPath: string;
  target: AnsiString;
begin
  NSSMPath := ExpandConstant('{src}\..\nssm-2.24.zip');
  target := 'C:\files';
  begin
    //Unzips files Checks for presence of files before to save time.
    //NSSM
    if not (FileExists('C:\files\nssm-2.24'))then
    begin
      ExtractMe(NSSMPath, target)
    end;
  end;
end;

1 个答案:

答案 0 :(得分:0)

unzip必须声明为stdcall,而不是cdecl。只需使用UnzipExample.iss

中的声明即可
procedure unzip(src, target: AnsiString);
external 'unzip@files:unzipper.dll stdcall delayload';