【问题标题】:Integer function result - "Value assigned to '[function name]' never used"整数函数结果 - “从未使用过分配给‘[函数名称]’的值”
【发布时间】: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


【解决方案1】:

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

该函数将返回UNZIP_SUCCESS(如果它有效),或者返回GetLastError(如果引发异常)的结果。因此,对Result 的第一次赋值是不必要的——没有会导致UNZIP_FAIL 返回的执行路径。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2022-07-02
      • 2015-10-18
      • 2013-10-08
      相关资源
      最近更新 更多