C++プロジェクトのDllからC#プロジェクトにインポートしようとしています。私は多くの人がDllImportの使い方について話し合っていることを知りました。私はそれを使用してみましたし、ここで私はhave-何DllImportを使用してC++ DLLをC#プロジェクトにインポートできません
CPPコード:
int __declspec(dllexport) beginCode(double reportId);
C#コード:
[DllImport("C:\\Users\\<my_user_id>\\Desktop\\ctxmix\\Release\\ctxmix.dll",CallingConvention =CallingConvention.Cdecl ,CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int beginCode(double reportId);
int result = beginCode(reportId);
しかし、私は実行したとき、私は例外を取得しています - 例外がスローされました: 'System.DllNotFoundException'
私はCPP Dllの参照を私が上に持っているコードとは別に何か他のことをしていますか?
編集:VS2015を使用して.exeを実行しようとしていますが、ローカルコンピュータでこの例外が発生します。また、Project-> Referencesセクションに私のCPP Dllが表示されません。そこには他の参照があります。
いいえ、マシン上で正常に実行できても、別のWindows 2003マシンにはロードできないため、重複しません。私の場合、VS2015を使用して実行すると、私のコンピュータでこの例外が発生します。 – Teja
エクスポートされた関数名が実際にどのようなものであるかを見るには、 'dumpbin/exports [あなたのdllここ]'コマンド(Visual Studioのコマンドプロンプトに含まれています)を使用します。確かに、C++コンパイラはbeginCodeを他のものに名前を変更しているので、関数を見つけることができません。これを修正するには、 'ExactSpelling'をfalseに変更します。また、私はCallingConvention.CdeclがC++ DLLに適しているとは思わないが、StdCallが必要だと思う。 – Cody
ありがとう@Cody。 Dependency walkerを使用して、関連する依存関係を取得できないことがわかりました。私はそれらをC:\ Windows \ System32フォルダに追加し、これを 'Path'環境変数に追加しました。今私はこのエラーを通過することができます。本当にありがとう。 – Teja