0

我正在将程序从 Delphi 2010 更新到 Delphi XE7。下面显示的代码已停止工作,因为我认为需要适应 unicode 并使用 GetFileVersionInfoW 而不是 GetFileVersionInfoSize。

有没有人开发了我正在使用的功能的更新版本,如下所示?到目前为止,我在网上找不到任何示例,恐怕低级 Windows 编程有点超出我的能力。

谢谢你的帮助!

下面的旧代码不再适用于 Delphi XE2 及更高版本:仅返回 1.0.0.0

procedure GetBuildInfo(var V1, V2, V3, V4: Word);
{From Steve Schafer }
var
  VerInfoSize: DWORD;
  VerInfo: pointer;
  VerValueSize: DWORD;
  VerValue: PVSFixedFileInfo;
  Dummy: DWORD;

begin
  VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy);
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', pointer(VerValue), VerValueSize);
  with VerValue^ do
    begin
      V1 := dwFileVersionMS shr 16;
      V2 := dwFileVersionMS and $FFFF;
      V3 := dwFileVersionLS shr 16;
      V4 := dwFileVersionLS and $FFFF;
    end;
  FreeMem(VerInfo, VerInfoSize);
end;
4

1 回答 1

3

当所有版本的 Delphi 编译时,您的代码运行良好。因此,关于为什么代码报告版本的唯一合乎逻辑的结论1.0.0.0是版本是1.0.0.0.

换句话说,通过查看此代码不会发现您的问题。通过找出您在编译时没有设法设置您想要的版本信息的原因,可以找到您的问题。

可能还值得指出的是,您的代码不会尝试检查返回值是否存在错误。

于 2014-12-05T07:03:45.437 回答