喫茶XRAYトップページ

[スレッド全体
]

[5328] XE2 バージョン情報の取得にて返信 削除
2011/9/28 (水) 22:26:03 Sara
みなさん、こんばんは。

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;


[5330] Re:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 00:05:02 Mr.XRAY
▼ Saraさん

> プロジェクトオプションのロケーションを日本語(日本)に設定すると、バージョン情報が
> 取得できません。(標準の英語 (米国)に戻すと取得できる)


これって,ざつだんの11/09/23にある2番目の問題とはまた違うようですね.
さて.UP1で修正されているとか...


[5331] Re2:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 00:37:40 Sara
▼ Mr.XRAYさん

> > プロジェクトオプションのロケーションを日本語(日本)に設定すると、バージョン情報が
> > 取得できません。(標準の英語 (米国)に戻すと取得できる)
>
> これって,ざつだんの11/09/23にある2番目の問題とはまた違うようですね.
> さて.UP1で修正されているとか...


いえ、この現象が起きているのは、Update1です。(無印は不明 もう環境がないので)


あと、以前書いたTPageControlに関する表示の不具合ですが・・・
Windows7上で正常に動作しているプロジェクトを丸ごと、WindowsXP上で
ビルドすると・・・またページコントロールが透けて他のシートが見える不具合が
再発してしまった・・・なんか、XE2のバグのような気がするんですが・・・(^^;
(ちなみに、スタイルをWindows以外に設定している場合です。 Windowsスタイルでは正常)

これは、たまたまWindows7でビルドしたEXEがVMPlayer上のWindowsXPで正常に動作しなかったので、
VMPlayerのWindowsXP上にDelphi XE2をインストールしてプロジェクトをビルドした時に起きた現象
です・・・しかも、Windows7上でビルドしたEXEがXP上で正常に動作しないのに、XPでビルドしたら、
WindowsXP上で正常に動くし・・・何なんだ・・・(^^;

しかも、XPでビルドしたEXEはXPでPageControl他のシートが透けて見えるのに、Windows7では正常に表示される・・・

もう、なにがどうなっているのやら・・・(^^;

XE2のスタイルは封印した方が良いかな・・・(^^; せっかく使えるのに・・・
まぁ、スタイルを使うと画面表示がずいぶん遅くなるので、ちょっと引きますが・・・

[5332] Re3:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 08:12:04 Mr.XRAY
▼ Saraさん

> (無印は不明 もう環境がないので)

折角コードを提示してくださったので,やってみました.
無印でもなりますね.やっぱり一連のバージョン情報関係の現象と関連
あるのかも.
同じコードを,6,7,2007.2009,2010,XEでやってみましたが,問題ありません.
日本語にしても設定したバージョン番号が表示されます.
IDEを終了して,再起動しても,オプションのバージョン情報は日本語で,
設定値もそのままです.


[5334] Re4:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 08:55:37 Mr.XRAY
あれっ!? SOさんのが消えている...

> 無印でもなりますね.やっぱり一連のバージョン情報関係の現象と関連
> あるのかも.


後で"CGRC ラッパー"をテストしてみます.
http://ht-deko.minim.ne.jp/ft1109.html#110923

[5339] Re5:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 23:37:27 Mr.XRAY
> 後で"CGRC ラッパー"をテストしてみます.

ちょっと遅くなりましたが,やってみました.
残念ながら,以下のエラーで止まってしまいました.

[BRCC32 エラー] "brcc32" はコード 3 を伴って終了しました。

調べたら,*.vrcがUTF-8ではなく,SHIFT-JISのままでした.
また調べてみます.


[5340] Re6:XE2 バージョン情報の取得にて返信 削除
2011/9/29 (木) 23:42:23 Mr.XRAY
> 調べたら,*.vrcがUTF-8ではなく,SHIFT-JISのままでした.
> また調べてみます.


あれっ,このファイル,UTF-8で保存しても,SHIT-JISで読み込まれるな...
何か勘違いしているかも.

というわけで,パスします.


[5343] Re7:XE2 バージョン情報の取得にて返信 削除
2011/9/30 (金) 01:57:30 DEKO 〔HomePage
ひょっとすると、バージョン情報に日本語が含まれない場合 (会社名とか)、
UTF-8 ではなく ANSI で保存されるのかもしれませんね。

# コンパイル時のメッセージで -c65001 とか出てたら UTF-8 です。

吐かれた *.vrc が UTF-8 かどうかの判定をして、
LoadFromFile / SaveToFile の辺りを工夫するといいかもしれません。

# 或いは、Shift_JIS に見えて、
# BOM なし UTF-8 (UTF-8N) だったり...?

[5344] Re8:XE2 バージョン情報の取得にて返信 削除
2011/9/30 (金) 11:44:36 Mr.XRAY
▼ DEKOさん,どうも

[バージョン情報]のロケールの設定が英語であっても,他の設定値は有効と
なりますから,もちろん会社名が漢字でも検出できます.
どうしても,ロケールの値が必要でない限り,不便はないのでは,
と思っています.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82