整数函数结果 - "Value assigned to '[function name]' never used"



我找到了一种解决方案,可以通过使用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的常数 - 如果整个函数失败,这是我自己的错误代码。我不认为编译器应该抱怨这一点,但我可能错了。我总是消除所有编译器的提示和警告,但是在这种情况下,编译器更像是投诉者。

这是编译器中的fluke,还是代码中有问题?

编译器是正确的,并且代码中有问题。: - )

如果起作用,该函数将返回UNZIP_SUCCESS,或者如果提出异常,则GetLastError的结果。因此,对Result的第一个分配是不必要的 - 没有执行途径会导致UNZIP_FAIL返回。

如果您删除了第一行result分配,则没有执行路径不会使result未分配。因此,UNZIP_FAIL值将永远不会返回。

最新更新