DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#で作成したexeからC++/CLIで作成したdllを呼び出すと例外となる

環境/言語:[C++/CLI、C#]
分類:[.NET]

開発環境:WindowsServer2003 x64
開発言語:C++、C#(VS2005)

アンマネージドなAPIを呼び出すためマネージドC++(C++/CLI)でDLLを作成し、
そのDLLをC#で作成したexeから呼び出そうとしています。
しかし、64bit環境でC#(VS2005)で作成したexe(コンソールアプリケーション)からC++(VS2005)で作成したdll(クラスライブラリ)のクラスを呼び出すとBadImageFormatException がスローされてしまいました。

同じプログラムを32bit環境で行うとこの例外は起こらず正常に動作します。
64bit環境でクラスライブラリを作成するときにはどのような設定が必要なのでしょうか?

C++のクラスライブラリの構成プロパティのプラットフォームは『Win32』とするとビルドは正常終了するのですが、これを『x64』を新規作成して指定すると今度はビルドエラーが大量に出てしまいます。(C2871 "System"指定された名前空間は存在しませんなど) 
また、VisualStudio2005には32bit版、64bit版と分かれているのでしょうか?

どなたかご存知でしたらご教授いただきますようよろしくお願いいたします。

以上
C++/CLIで、/clrの場合にはプラットフォーム別にDLLを分ける必要があります。
必然的にそれを参照しているC#も分ける必要があります。

>C++のクラスライブラリの構成プロパティのプラットフォームは『Win32』とするとビルドは正常終了するのですが、これを『x64』を新規作成して指定すると

やるべき処置は正解です。

>今度はビルドエラーが大量に出てしまいます。(C2871 "System"指定された名前空間は存在しませんなど) 

もっとちゃんと調べてください。
特にCは1つのエラーで大量のエラーやワーニングが出る場合があります。

>VisualStudio2005には32bit版、64bit版と分かれているのでしょうか?

分かれていません。
もしかしてプラットフォームを選ぶときに既存のWin32をコピーしていないんじゃないですか?
/clrオプション付いていますか?

>C++/CLIで、/clrの場合にはプラットフォーム別にDLLを分ける必要があります。
>必然的にそれを参照しているC#も分ける必要があります。

参照しているC#を分けるってのは環境的に分ける必要があるって言う意味で、同じEXEでDLLを差し替えてインストールするなら問題はありません。
中博俊さま

回答が遅くなり申し訳ありません。

ご教授いただきどうもありがとうございました。
■No15749に返信(中博俊さんの記事)
> もしかしてプラットフォームを選ぶときに既存のWin32をコピーしていないんじゃないですか?
⇒空のプラットフォームから作成していました。

> /clrオプション付いていますか?
⇒ご指摘のとおり、/clrオプションがついていませんでした。

また、Win32で正常にビルドできたものとプロジェクトプロパティを比較し、
足りないものチェックし、無事ビルド、動作確認ができました。
どうもありがとうございました。
また何かありましたらよろしくお願いいたします。

以上
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板