我正在从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;
答案 0 :(得分:3)
当所有版本的Delphi编译时,您的代码运行良好。因此,唯一合乎逻辑的结论是,代码报告版本1.0.0.0
的原因是版本为1.0.0.0
。
换句话说,通过查看此代码无法找到您的问题。您可以通过找出为什么在编译时无法设置版本信息来找到问题。
可能还值得指出的是,您的代码不会尝试检查错误的返回值。