諸事情により、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
が使われる。
No.1
- 回答日時:
シンボリックリンクを使って逃げられるかな、と思ったり。
http://www.atmarkit.co.jp/fwin2k/win2ktips/988sy …
ProgramFiles/hogeをProgramFiles(x86)/hogeと読み替える。
あ、ふと思っただけなので、できるかどうかはわかりません。
でも結局、これってビルド確認のみで、動作確認できないのでは。
Vista64bitで32ビットDLLをインポートしようとしてもできないはずなので。
この回答への補足
ちゃんと動いてますよ。
動かないのは間違えて64bitのdllをimportしたときで、
ビルドはできますが、実行するとエラーが出まくりです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- C言語・C++・C# ExcelCS 1 2023/01/27 19:47
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- ソフトウェア Aimpに関する質問です。 1 2022/09/08 11:11
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Chrome(クローム) インターネットショートカットをダブルクリックしてもWebページが開けなくなりました 2 2022/04/01 15:28
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
EXCELのVBAでRange("A1:C4")を...
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
マクロの連続実行
-
TERA TERMを隠す方法
-
Excel VBAからAccessマクロを実...
-
ピボットテーブルでの毎回可変...
-
VBAのIF分で時間指定の条件式の...
-
OnTimeを使ったのですが「エラ...
-
エクセルでキーリストからデー...
-
TeraTermマクロの文字列結合
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
VBA初心者 Ctrl+での操作、ボタ...
-
EXCELのマクロの重複起動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
他人が作ったマクロの理解
-
ExcelVBAでPDFを閉じるソース
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
TeraTermマクロの文字列結合
-
PDF出力マクロについて。マクロ...
-
#defineの定数を文字列として読...
-
エクセルのマクロをセルの値に...
-
wordを起動した際に特定のペー...
おすすめ情報