プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

VS2015を使用しておりC#のプログラムを作ろうとしております。

その中でC++で作成したx64対応のDLLを呼び出そうとしているのですが、
呼び出し側のExeのプラットフォームが「AnyCpu」だと読み込みエラーとなります。

自分で調べたところ「OSが64ビットであれば64ビットのプロセスとして動作する」
とのことなのですが、私の環境(Windows10Pro 64bitOS x64ベースプロセッサを使用)で
デバッグをしてみると「AnyCpu」では32bitとして実行されているようなのです。
※INTPTR.Sizeプロパティが4で返却されるので間違いないと思います。

「AnyCpu」の特性が良く分かっていないのですが、64bitOSで32bitとして実行されるのは
デフォルトがどこかで設定されているからでしょうか?

また、「AnyCpu」指定でExeを作ろうとするのであれば、その中でネイティブのDLLなど
x64固定でビルドされているものは呼び出せないでしょうか?
(常に相方のx86ビルドされたDLLを探しているのでエラーとなるのかと考えています)

今後32bitOSでExeを起動することはないので、DLLのビルド方式がx64なのは問題ないのですが、
「AnyCpu」が指定されているExeの中で上記DLLが呼び出せないので非常に困っています。

長文となりましたが、どんなことでも良いのでご存知の情報を頂けないかと思っています。

どなたか詳しい方のご協力をお願いします。

A 回答 (1件)

C# で AnyCPU で作成したアプリケーションを 64bit 環境で実行したときに 32bit で実行されるって話ですかね。



C# アプリケーションのソースを Visual Studio で開き、プロジェクトのプロパティで [ビルド] の 「プラットフォーム ターゲット」 の下にある「32ビットを優先」にチェックが入っているとか。
これにチェックが入っていると、32bit で動かせる場合は 32bit となるようです。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございました。

ご指摘いただいた通り、「32ビットを優先」となっており、
これを外したら問題なくなりました!

お礼日時:2016/12/04 11:07

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A