【发布时间】:2014-02-02 00:11:29
【问题描述】:
我发现a solution 通过使用 Ole 创建 DLL 来提取 zip 文件的内容。我对这个函数进行了自己的修改,但由于某种原因,编译器抱怨该函数的结果从未使用过......
library unzipper;
{
title : UnZip for InnoSetup
version : 1.0
author : Daniel P. Stasinski
email : daniel@genericinbox.com
begin : Fri Nov 22 17:31:33 MST 2013
license : None
}
uses
Windows,
SysUtils,
ComObj;
const
SHCONTCH_NOPROGRESSBOX = 4;
SHCONTCH_AUTORENAME = 8;
SHCONTCH_RESPONDYESTOALL = 16;
SHCONTF_INCLUDEHIDDEN = 128;
SHCONTF_FOLDERS = 32;
SHCONTF_NONFOLDERS = 64;
UNZIP_SUCCESS = 0;
UNZIP_FAIL = -1;
function UnzipFile(ZipFile, TargetFolder: WideString): Integer; stdcall;
var
shellobj: variant;
ZipFileV, SrcFile: variant;
TargetFolderV, DestFolder: variant;
shellfldritems: variant;
begin
Result:= UNZIP_FAIL;
try
shellobj := CreateOleObject('Shell.Application');
ZipFileV := string(ZipFile);
TargetFolderV := string(TargetFolder);
SrcFile := shellobj.NameSpace(ZipFileV);
DestFolder := shellobj.NameSpace(TargetFolderV);
shellfldritems := SrcFile.Items;
DestFolder.CopyHere(shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL);
Result:= UNZIP_SUCCESS;
except
on e: exception do begin
Result:= GetLastError;
end;
end;
end;
exports
UnzipFile;
begin
end.
它给了我信息...
[DCC 提示] Unzipper.dpr(35): H2077 分配给“UnzipFile”的值从未使用过
这来自函数中的第一行代码,我将其初始化为常量-1 - 如果整个函数失败,这是我自己的错误代码。我不相信编译器应该抱怨这个,但我可能是错的。我总是消除所有编译器提示和警告,但在这种情况下,编译器更像是一个抱怨者。
这是编译器的侥幸,还是代码有问题?
【问题讨论】:
-
Delphi 已经内置了库,为什么还要选择这种方式解压呢?和 tpAbbrevia。等等。为什么 GetLastError 在这里有意义?我认为没有理由相信这一点。
标签: function delphi delphi-xe2