小编Lar*_*ars的帖子

当函数中出现异常时,TStrings返回为"无法访问的值"

有人可以帮助我解释为什么在底层函数中引发异常时,TStrings被返回为"无法访问的值"吗?

function GetStrings():TStrings;
begin
  result := TStringList.Create;
  try
    raise exception.Create('Error Message');
  except
    FreeAndNil(result);
    raise
  end;
end;

procedure TFormMain.Button1Click(Sender: TObject);
var
  S : TStrings;
begin
  try
    S := GetStrings;
    try
      //Do awesome stuff
    finally
      FreeAndNil(S)
    end;
  except
    //Debug watch: S = "Inaccessible value"
    Assert(S = nil, 'Assertion failure, S should be nil'); 
  end;
end;
Run Code Online (Sandbox Code Playgroud)

GetStrings如果我FreeAndNil(result);在重新引发异常之前没有调用,该函数也会返回"无法访问的值" .但是,我手上也有内存泄漏:-O

delphi

5
推荐指数
1
解决办法
478
查看次数

如何从批处理或 Inno Setup 脚本中获取 Inno Setup 版本号?

是否可以获得 Inno Setup 版本号以在 Inno Setup 安装程序中使用?

我找不到记录的开关来返回其版本号(例如 5.5.6),并且似乎没有暴露给 Inno Setup 脚本的预定义版本常量。

inno-setup

3
推荐指数
1
解决办法
493
查看次数

标签 统计

delphi ×1

inno-setup ×1