0
私はVisual C++ 2015(vc140)でコンパイルされたライブラリを持っています。 私はC#ターゲティング.netフレームワーク4.6.1でクライアントアプリケーションを持っています。vc140コンパイラでのP/Invokeブレーク
クライアントアプリケーションは、ライブラリからエクスポートされた関数を呼び出すことはできません(「DLLが見つかりません」という例外が発生しています)。しかし、コンパイラをvc120(Visual C++ 2013)に変更すると、すべて正常に動作します。
これはセットアップの問題ですか?
DLLは、クライアントアプリケーションが期待している場所とは異なる場所にあるようです。 – Cameron
コンパイラオプション(x86、Debug、Release)に応じて、dllはbinの正しいサブフォルダに存在する必要があります。プロジェクトに「Existing Item」を追加し、実行可能ファイル(.exe、.dll、..)を選択すると、コンパイラは実行ファイルをソースフォルダから正しいbinフォルダに自動的にコピーします。実行ファイルをbinフォルダに手動で置くと問題が発生する可能性があります(C#のバージョンによって異なります)。いくつかのバージョンは、Rebuild Allオプションを使用してbinからすべてのファイルを削除します.dllを手動でbinフォルダに入れる必要があることがわかった唯一の時間は、Windowsで動作するように設計されていない古いDLLです。 – jdweng
フルパスP/Invokeの定義はまだ助けにはなりません。アーキテクチャの一致(クライアントとサーバーの両方のセットアップでx64)が確認されました。これはvc120でコンパイルされているので、やはりvc140コンパイラに関係しているようです。 – sqexpress