Delphi 64 位调试和发布配置之间的区别?

问题描述 投票:0回答:0

我使用以下代码来获取我的应用程序的 EXE 版本。代码在FormCreate中:

procedure Tform1.FormCreate(Sender: TObject);
var
  vMajor, vMinor, vRelease, vBuild: DWord;
  size, len: longword;
  handle: DWord;
  buffer: pchar;
  pinfo: ^VS_FIXEDFILEINFO;
begin

  try
    size := GetFileVersionInfoSize(Pointer(Application.ExeName), handle);
    if size > 0 then begin
      GetMem(buffer, size);
      if GetFileVersionInfo(Pointer(Application.ExeName), 0, size, buffer)
      then
        if VerQueryValue(buffer, '\', pointer(pinfo), len) then begin
          VMajor   := HiWord(pinfo.dwFileVersionMS);
          VMinor   := LoWord(pinfo.dwFileVersionMS);
          VRelease := HiWord(pinfo.dwFileVersionLS);
          VBuild   := LoWord(pinfo.dwFileVersionLS);
        end;
    end;
  finally
    FreeMem(buffer);
  end;
…

代码在 32 位调试和发布配置以及 64 位调试中按预期工作。它返回当前版本,即 2022.4.112.891。

但是,在 64 位 Release 配置中,VRelease 和 VBuild 不正确,代码返回 2022.4.8614.28017。

32 位版本和 64 位版本的 GetFileVersionInfoSize 是相同的,这是我所期望的。

64位调试和发布配置之间有什么区别会导致调用失败?

delphi 32bit-64bit
© www.soinside.com 2019 - 2024. All rights reserved.