2011-12-30 20 views
1

私は最近C++/CLIで小さなネイティブC++ラッパーを作成しました。そのシンプルなプログラムです。私はそれを正しくコンパイルすることができ、エラーなしで私のC#プロジェクトでdll refeernceを追加することができます。また、このCPP/CLI dllからオブジェクトを作成し、エラーなくコンパイル時に関数にアクセスすることもできます。プロジェクトで参照されているC++/CLI DLLが実行時に見つかりません

今すぐプログラムを実行すると、このDLLからオブジェクトを参照する最初の関数呼び出しで例外がスローされます。次のように例外は次のとおりです。

は、ファイルまたはアセンブリをロードできませんでした「ProtobufWrapper、バージョン= 1.0.4381.26401、カルチャニュートラル、PublicKeyToken = = null」またはその依存関係の1つ。システムは、指定されたファイルを見つけることができません。

私の場合、何が間違っているのか分かりません。

+0

実行中のホストでGACを調べましたか? –

+0

C++/CLIプロジェクトは他のアセンブリを参照していますか? –

+0

@ M.Babcock:DLLが見つかりましたが、読み込みに失敗した場合、エラーメッセージは少し変わると思います。負荷の失敗の一般的な理由としては、依存関係の欠如やアーキテクチャの誤り(x64プロセスのx86 DLL)などがあります。しかし、この場合、おそらくライブラリの検索パスには含まれていません。 –

答えて

1

DLLファイルは、起動している.Exeと同じディレクトリにありますか?ファイルがコピーされず、見つからないことがあります。

DLL参照でプロパティをクリックし、ビルドアクションを確認します。コピーに設定します。

+1

返事をいただきありがとうございます。 DLLがメインプログラムのバイナリフォルダにコピーされていないことを認識しました。理由は、私がC++/CLIライブラリを参照しているC#プログラムは、まだ別のC#メインプログラムで使用されている別のライブラリです。メインのC#プログラムでC++/CLIライブラリへの参照を追加するのを忘れました。今素晴らしい仕事。 – Alok

+1

DLLをロードする場所を明示的に指定する方法はありますか?私はそれらを同じディレクトリに置かなくてもいいです。私はPATHにC#dllの場所を追加しようとしましたが、それは役に立たなかった。 –

+2

@マーク:はい、 'AppDomain.AssemblyResolve'イベントを処理します。ボーナスとして、プロセスが32ビットか64ビットかに応じて、異なるC++/CLI混合モードDLLを選択することができます。 –

関連する問題