2016-06-10 2 views
1

.dll 파일을 사용하여 파일의 압축을 해제하려고하는데, 코드 섹션에서 추출 절차를 호출 할 때마다 온라인 상태가됩니다. 다음과 같은 오류 :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

소스를 사용하면 작동합니다 : "{src} \ .. \ nssm-2.24.zip"; DestDir : "{app}"; AfterInstall : ExtractMe ('C : \ eltfiles \ nssm-2.24.zip', 'C : \ eltfiles') 실행 섹션에서 DestDir에서 추가 .zip 파일을 제거하려고했습니다. –

+0

.dll에 오류가 있음을 나타내는 오류가 있습니까? 그렇다면 더 많은 것을 배울 수있는 웹 리소스로 안내해 주시겠습니까? –

답변

0

unzipcdecl이 아니라 stdcall으로 선언되어야합니다. UnzipExample.iss에서 선언문을 사용하십시오.

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

This 그러나 [파일] 섹션에서 압축 해제 할 파일을 지정하는 경우에만 이상하게 작동하는 것으로 보입니다. 예 : "{src} \ .. \ apache-tomcat-7.0.69.zip"; DestDir : "{app} "; AfterInstall : ExtractMe ('C : \ files \ apache-tomcat-7.0.69.zip', 'C : \ files') 코드 섹션에서 ExtractMe 메서드를 호출하려고하면이 오류가 계속 발생합니다. 하지만 지금은 충분하다. 감사합니다. –

+0

당신은 전에도'AfterInstall'에서 당신을 위해 일한다고 쓴 적이 있습니다. 방법으로 이해가된다). –