みなさん、こんばんは。
Delphi XE2(Update1)で、以下のコードをもちいてバージョン情報の取得をする場合、
プロジェクトオプションのロケーションを日本語(日本)に設定すると、バージョン情報が
取得できません。(標準の英語 (米国)に戻すと取得できる)
何故かわかる方、ご教示をお願いします。m(_ _)m
(まぁ、英語(米国)にしておけば、動作するので、困ってはいないんですが(^^; )
function GetVersionInfo(KeyWord: TVerResourceKey): string;
const
Translation = '\VarFileInfo\Translation';
FileInfo = '\StringFileInfo\%0.4s%0.4s\';
var
BufSize, HWnd: DWORD;
VerInfoBuf: Pointer;
VerData: Pointer;
VerDataLen: Longword;
PathLocale: String;
begin
BufSize := GetFileVersionInfoSize(PChar(Application.ExeName), HWnd);
if BufSize <> 0 then
begin
GetMem(VerInfoBuf, BufSize);
try
GetFileVersionInfo(PChar(Application.ExeName), 0, BufSize, VerInfoBuf);
VerQueryValue(VerInfoBuf, PChar(Translation), VerData, VerDataLen);
if not (VerDataLen > 0) then
raise Exception.Create('情報の取得に失敗しました');
PathLocale := Format(FileInfo + KeyWordStr[KeyWord],
[IntToHex(Integer(VerData^) and $FFFF, 4),
IntToHex((Integer(VerData^) shr 16) and $FFFF, 4)]);
VerQueryValue(VerInfoBuf, PChar(PathLocale), VerData, VerDataLen);
//ここでVerDataLenが0になる・・・(英語(米国)だと0以外になる)
if VerDataLen > 0 then
begin
result := '';
SetLength(result, VerDataLen);
StrLCopy(PChar(result), VerData, VerDataLen);
end;
finally
FreeMem(VerInfoBuf);
end;
end;
end;
|