アプリ版:「スタンプのみでお礼する」機能のリリースについて

諸事情により、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で管理しているので、うっかり最新版に更新して
ビルドすると、エラーがぞろぞろ出て要らぬ工数がかかっています。

よろしくお願いいたします。

A 回答 (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
が使われる。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/27 10:29

シンボリックリンクを使って逃げられるかな、と思ったり。


http://www.atmarkit.co.jp/fwin2k/win2ktips/988sy …
ProgramFiles/hogeをProgramFiles(x86)/hogeと読み替える。
あ、ふと思っただけなので、できるかどうかはわかりません。

でも結局、これってビルド確認のみで、動作確認できないのでは。
Vista64bitで32ビットDLLをインポートしようとしてもできないはずなので。

この回答への補足

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

補足日時:2009/06/27 10:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!