2016-06-10 4 views
1

Я пытаюсь разархивировать файл, используя файл .dll, который я получил в Интернете, но всякий раз, когда я вызываю процедуру извлечения из секции кода, которую я получаю следующее сообщение об ошибке:Ошибка при доступе к нарушению при вызове внешней функции в DLL (unzip in unzipper.dll)

Exception:
Access violation at address 025DA648. Read of address 00000000.

Процедура:

procedure unzip(src, target: AnsiString); 
external '[email protected]: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; 
+0

Получить рабочий .dll? –

+0

Он работает, если я использую Source: "{src} \ .. \ nssm-2.24.zip"; DestDir: "{app}"; AfterInstall: ExtractMe ('C: \ eltfiles \ nssm-2.24.zip', 'C: \ eltfiles') в разделе выполнения, однако я пытался исключить дополнительный .zip-файл в DestDir. –

+0

Ошибка указывает на ошибку .dll? Если бы вы не обратили внимание на веб-ресурс, где я мог бы узнать больше? –

ответ

0

unzip должно быть объявлено как stdcall, а не cdecl. Просто используйте декларацию от UnzipExample.iss:

procedure unzip(src, target: AnsiString); 
external '[email protected]:unzipper.dll stdcall delayload'; 
+0

Это похоже, работает как бы странно, только если я укажу файлы, которые нужно разархивировать в разделе [Files], например. Source: "{src} \ .. \ apache-tomcat-7.0.69.zip"; DestDir: "{app} "; AfterInstall: ExtractMe ('C: \ files \ apache-tomcat-7.0.69.zip', 'C: \ files'), я продолжаю получать эту ошибку, если попытаюсь просто вызвать метод ExtractMe в разделе кода. Но это работает для меня сейчас, спасибо. –

+0

Вы написали, что он работает для вас из 'AfterInstall' еще раньше (что не есть смысл, кстати). –

 Смежные вопросы

  • Нет связанных вопросов^_^