• ベストアンサー

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

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8518/19364)
回答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

  • Program Filesについて

    win7 Home Premium 64bitを使用しています。 C:\を見ると、 ・Program Files ・Program Files(x86) とふたつの「Program Files」があります。 私のパソコンは64bitなので、Program Filesが本物でしょうか? そもそもこの二つの違いはなんですか? (x86)は32bitと言う意味ですよね? ご回答よろしくお願いします。

  • Pgoram files(x86)へのアクセス

    以下について、至急教えてくださいませ。 (当方、64bitOS環境、プログラミングについては、経験が浅いです。) 質問(1) 32bit版自作プログラムをPgoram files(x86)の下のあるフォルダ内で起動させ、そのプログラムであるオペレーションを実行した場合に、Pgoram files(x86)の下の別フォルダにテキスト形式のファイルを保存して、そのファイルを自動でメモ帳(notepad)を起動して開いて見れるようにしたいのです。 ファイルの保存迄は、できるのはわかっているのですが、その後のnotepadを自動的に起動してそのファイルを開く事は簡単にできるのかどうかがわかりません。(64bit環境がないので確認できておりません)。Windows7ではセキュリティの面で簡単にできないようなイメージを持っているのですが。 簡単にできるのか?難解なのかわかりませんが、いづれにせよできる方法、さらに使用するAPI等について、どなたかわかる方いらっしゃいましたら、大至急教えてくださいませ。 プログラム起動フォルダ:c:\Pgoram files(x86)\sub1\sub2\testprogram.exe(プログラムファイル名) テキスト保存先:c:\Pgoram files(x86)\sub1\sub2\sub3\something.txt(テキストファイル名) 質問(2) 上記の質問(1)で記述しているテキストファイルの保存先が、同じくWindows7(67bitOS)の c:\ユーザ\sub1\デスクトップ\sub2に保存された場合はいかがでしょうか? 上記(1)の場合と同じようく可能なのでしょうか?それとも(1)と(2)では、違う方法で アプローチしないとダメでしょうか? プログラム起動フォルダ:c:\Pgoram files(x86)\sub1\sub2\testprogram.exe(プログラムファイル名) テキスト保存先:c:\ユーザ\sub1\デスクトップ\sub2\something.txt(テキストファイル名) 64bit環境が手元にありませんので、確認ができない都合上プログラミングするに先だって質問 させて頂いてます。詳細に教えて頂ければ幸いであります。 よろしくお願いいたします。 プログラム開発環境:WindowsXP(日本語)、使用言語Visual C++6.0 プログラム動作環境:Windows7(日本語:64bitOS)

  • Program Filesについて

    Windows8です。 最近買ったPCでWindows7(64bit)から優待版windows8へアップグレードしました。 CドライブにProgram Files(x86)とProgram Files がありますが、 このうちProgram Files(x86)をCドライブから削除しても構いませんか。 何だか不要な気がしますけど(PCに疎いので)。 理由はPCが64bitしかもwindows8とファイルの空き容量を少しでも増やしたいからです。 現在Cドライブは総容量700GBに対し空き容量は 650GBでまだ十分ありますが。 また、Windows8で不要なプログラムはコントロールパネルのプログラムのアンインスト―ル一覧 から削除(市販アプリ中心)しています。

  • Program Filesフォルダ

    win7 64bitです。 ソフトをインストールすると、 Program Filesフォルダに入ったり、 Program Files(x86)フォルダに入ったりするのですが この違いはなんでしょうか? 任意でインストール先を選択できる場合は、 どちらのファイルに入れたほうが良いですか?

  • Program Files の削除について

     DELL のノートパソコン、Win 10を使っています。  OSのフォルダーの中にProgram Files と Program Files (x86) というフォルダー PC の購入して間もない頃に気付きました。それぞれには、ほぼ同じ名前のファイルが複数あります。中には一方だけにしかないファイルもあります。  この2つのフォルダーのうち Program Files を削除して、ハードディスクを軽くしたいのですが、削除をしても大丈夫でしょうか?もし大丈夫なら、Program Files から必要なファイルだけを Program Files (x86) に移動させた後で削除しようと考えています。削除の方法を教えてください。  情報不足であれば、再度お伝えいたします。  よろしくお願いいたします。

  • Vistaの"Program Files"にインストールすると

    Vistaの"Program Files"フォルダにデータベースプログラムをインストールしました。 データベースや設定ファイルは全てインストールフォルダ直下に配置して、参照するようにしてあります。 ところが、プログラムはそれらのファイル参照せずに動作しています。書き込みや削除もできますが、インストールフォルダにあるファイルは更新されていません。 しかしプログラムを起動すると更新内容を正しく表示します。 全ドライブを検索してみましたが、インストールしたフォルダ以外にファイルは見つかりません。 アンインストールしても、更新したデーターベースや設定ファイルは残っているようで、再度インストールし直すと、前に登録した内容が残っています。 試しに更新されない設定ファイルをエディタで編集しようとしたところ、書き込みできませんでした。 インストールフォルダの設定を見たら読み込み専用になっていました。(読み込み専用に設定した覚えはないのですが) 読み込み専用を解除しましたが、やはり書き込み出来ませんでした。 XPの"Program Files"でテストした時は正常に動作しました。 Vistaでも"Program Files"フォルダ以外なら正常に動きます。 Vistaの"Program Files"フォルダにインストールするには何か設定が必要なのでしょうか? OS:Vista Business 開発環境:Visual Studio 2005/VB.NET/Access インストーラー:Windows インストーラー

  • VISTA64bit,VS2005/C++で対象コンピュータを「x64

    VISTA64bit,VS2005/C++で対象コンピュータを「x64」にして簡単なプログラムをビルドすると以下のエラーが出てしまいます。 「1>.\Debug\stdafx.obj : fatal error LNK1112: モジュールのコンピュータの種類 'X86' は対象コンピュータの種類 'x64' と競合しています。」 OS   :VISTA Ultimate64bit CPU   :Xeon5080(64bit), 開発環境:VS2005 Team Edition for software developers完全インストール ◎OSもCPUも64bit対応なのに何故かモジュールのコンピュータは32bitでビルドしてしまいます。解決方法はありますでしょうか? 追記:気になることは、VS2005が普通の「Program files」のフォルダではなく「Program Files(x86)」に強制的にインストールしてしまうことです。

  • program files にsound.dll というファイルが!!

    program files にsound.dllというファイルがあります program files の中にはsound.dll 以外はフォルダ しかなかったのでちょっと気になってます。このファイルは削除しても良いのでしょうか?? 問題がないので残しておいた方がよいのでしょうか? OSはxpです

  • proguram files x86

    パソコンを買い換えてphotoshopのソフトを新しいパソコンにインストールしたところ、 同じファイルがproguram files x86方にもインストールされています。 OSは64bit版のWindows7なので32bitに入っているphotoshopファイルは使わないのでは? と素人は思うのですが、86に入っている同じソフトを削除すると不都合あるでしょうか? そしてなぜかWindowsMailやWindowsLiveといったものまで、 同じように別々にインストールされています。 (これもproguram files x86の方を削除することは止めた方がいいでしょうか?) パソコンでソフト以外のデータを送ったのでメモリは16GBあるはずなのですが、全てがCドライブにインストール、又は転送されてしまったので、領域111GBあるのに残りが3GBになってしまいました。 Dドライブは1.81TBありますが何をDに入れるべきか教えてくださるとうれしいです。 よろしくお願いします。

  • Program Filesにインストールしない場合

    とあるフリーソフト(有名なファイラーです)をインストールしたいです。 インストールの手順をよく読んだところ、書き込み制限のあるProgram Filesフォルダーにはインストールしないこと、とありました。 今までソフトウェアのインストール先にはProgram Filesフォルダーしか指定したことがありません。 また、インストールの必要なく起動できるソフトも手動でProgram Filesフォルダーに入れて管理してきました。 データ用には別のHDD(Dドライブ)を搭載しているので、Cドライブ直下に自分で何かファイルやフォルダーを作ったことはありません。 今回の場合、Cドライブ直下に「Program Files」「Program Files(x86)」とは違う新たなフォルダー(「Program Files2」など)を作ってそこにインストールするという形をとっていいのでしょうか? 多くの方はどのような方法をとっているのでしょうか? お詳しい方いらっしゃいましたらアドバイスお願いしますm(_ _)m ※Windows7HP64bitです

専門家に質問してみよう