諸事情により、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.1
- 回答日時:
シンボリックリンクを使って逃げられるかな、と思ったり。
http://www.atmarkit.co.jp/fwin2k/win2ktips/988sy …
ProgramFiles/hogeをProgramFiles(x86)/hogeと読み替える。
あ、ふと思っただけなので、できるかどうかはわかりません。
でも結局、これってビルド確認のみで、動作確認できないのでは。
Vista64bitで32ビットDLLをインポートしようとしてもできないはずなので。
この回答への補足
ちゃんと動いてますよ。
動かないのは間違えて64bitのdllをimportしたときで、
ビルドはできますが、実行するとエラーが出まくりです。
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
が使われる。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで縦に並んだデータを...
-
Excel2000:Ontimeメソッドで特...
-
ExcelのVBA。public変数の値が...
-
既存のマクロをコンボボックス...
-
エクセルで別のセルにあるふり...
-
右クリックによるイベントマク...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
一つのTeratermのマクロで複数...
-
Excelで特定の文字のところで自...
-
特定のPCだけ動作しないVBAマク...
-
マクロ実行時、ユーザーフォー...
-
エクセルに張り付けた写真のフ...
-
エクセルでA1セルに時刻をリア...
-
エクセル マクロ 指定日の指定...
-
EXCELのマクロの重複起動...
-
VBAの記述の、Sub SetValue()など
-
エクセルのマクロについて教え...
-
VC++ 2008 EXPRESS "_T"識別子...
-
ワードで算用数字を漢数字に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
マクロ実行時、ユーザーフォー...
-
wordを起動した際に特定のペー...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
-
マクロで空白セルを詰めて別シ...
-
【EXCEL VBA】オートシェイプを...
-
エクセルのマクロをセルの値に...
おすすめ情報