• ベストアンサー

Program Files(x86) と Program Files の切替

諸事情により、Windows Vista 64bitとXP 32bit上で32bitアプリケーションを開発しています。 開発環境はVisualStudio2005(これも諸事情…)でC++ + MFCです。 Program Files以下のDLL(32bit)をヘッダファイルでimportしているのですが、 32bit OSの人は"Program Files"からで 64bit OSの人は"Program Files(x86)"からと 1つのソースコード中で#defineなどで自動的に切り替える方法はあるでしょうか? ※ヘッダファイルでimportの方針も諸事情で変更できません。 現在、自分の環境に合わせてコメントアウトでごまかしていますが、 ソースコードをVSSで管理しているので、うっかり最新版に更新して ビルドすると、エラーがぞろぞろ出て要らぬ工数がかかっています。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

「環境変数をマクロに取り込む」と言う手があります。 プロジェクトのコンパイラ指令に「マクロを定義するスイッチ」がある筈です。 そこに、環境変数を展開するように記述すれば、うまく行くでしょう。 例えば、マクロ定義スイッチが -D マクロ名=定義内容 なのであれば -D PROGRAM_FILES_X86=%PROGRAMFILESX86% と指示しておいて、環境変数PROGRAMFILESX86に「0」か「1」をセットしておきます。 あとは、ヘッダファイルで #ifdef PROGRAM_FILES_X86 #if PROGRAM_FILES_X86 == 1 #import <c:/Program Files(x86)/hogehoge.dll> #else #import <c:/Program Files/hogehoge.dll> #endif #else #import <c:/Program Files/hogehoge.dll> #endif と書いておく。 これで、環境変数PROGRAMFILESX86に「1」と定義しておけば Program Files(x86) が使われるし、環境変数PROGRAMFILESX86に「1以外」を定義しておくか、コンパイラ指令にマクロ定義をしていないなら Program Files が使われる。

ayudaia
質問者

お礼

ありがとうございます。 早速試してみます。

その他の回答 (1)

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

シンボリックリンクを使って逃げられるかな、と思ったり。 http://www.atmarkit.co.jp/fwin2k/win2ktips/988symlink/symlink.html ProgramFiles/hogeをProgramFiles(x86)/hogeと読み替える。 あ、ふと思っただけなので、できるかどうかはわかりません。 でも結局、これってビルド確認のみで、動作確認できないのでは。 Vista64bitで32ビットDLLをインポートしようとしてもできないはずなので。

ayudaia
質問者

補足

ちゃんと動いてますよ。 動かないのは間違えて64bitのdllをimportしたときで、 ビルドはできますが、実行するとエラーが出まくりです。

関連するQ&A

専門家に質問してみよう