2016-05-31 17 views
0

私はVisual C++ 2015(vc140)でコンパイルされたライブラリを持っています。 私はC#ターゲティング.netフレームワーク4.6.1でクライアントアプリケーションを持っています。vc140コンパイラでのP/Invokeブレーク

クライアントアプリケーションは、ライブラリからエクスポートされた関数を呼び出すことはできません(「DLLが見つかりません」という例外が発生しています)。しかし、コンパイラをvc120(Visual C++ 2013)に変更すると、すべて正常に動作します。

これはセットアップの問題ですか?

+0

DLLは、クライアントアプリケーションが期待している場所とは異なる場所にあるようです。 – Cameron

+0

コンパイラオプション(x86、Debug、Release)に応じて、dllはbinの正しいサブフォルダに存在する必要があります。プロジェクトに「Existing Item」を追加し、実行可能ファイル(.exe、.dll、..)を選択すると、コンパイラは実行ファイルをソースフォルダから正しいbinフォルダに自動的にコピーします。実行ファイルをbinフォルダに手動で置くと問題が発生する可能性があります(C#のバージョンによって異なります)。いくつかのバージョンは、Rebuild Allオプションを使用してbinからすべてのファイルを削除します.dllを手動でbinフォルダに入れる必要があることがわかった唯一の時間は、Windowsで動作するように設計されていない古いDLLです。 – jdweng

+0

フルパスP/Invokeの定義はまだ助けにはなりません。アーキテクチャの一致(クライアントとサーバーの両方のセットアップでx64)が確認されました。これはvc120でコンパイルされているので、やはりvc140コンパイラに関係しているようです。 – sqexpress

答えて

0

これは、C++ AMPライブラリ(これは奇妙です)で使用されるd3d dllに関連しているようです。 dllへの参照を追加した後、問題は解決されます。