最終的にC++ DLLが完成しましたが、C#から呼び出すのに問題があります。私は別の例外、 'DLLNotFoundException'を取得するフォルダから削除するとき、それは間違いなくDLLを見つけることです。完全なエラーの説明は、 "DLL 'CComms.dll'で 'GetNewInstance'という名前のエントリポイントを見つけることができません。機能はすべてのようにC#からアンマネージ関数を呼び出そうとすると、System.EntryPointNotFoundExceptionが発生する
__declspec(dllexport) DWORD __stdcall GetNewInstance();
のようにC++で輸出されていると私は「DUMPBIN /輸出はCComms.dll」私は、私はいくつかの奇妙な出力を得る使用する場合、私はそう
[DllImport("CComms.dll")]
private static extern uint GetNewInstance();
// ... and in main
uint inst = GetNewInstance();
のようなC#のからそれを呼び出しますわからない関数名がマングルされたものであり、それは、エントリポイントに
7 6 00002FB0 [email protected]@YGKXZ = [email protected]@YGKXZ (unsigned long
__stdcall GetNewInstance(void))
を見つける傾ける理由ですか私の代わりに__stdcallの__cdeclを使用してみました、と同じ結果を持っていました。私はこのプロジェクトでやっていることにとても近いので、これは私が最後までやり遂げた最後のものです。
ありがとうございました。
を解決私はあなたが私を参照してくださいntion "CComms.dll"、DllImport属性は "VLTGLSCommsDLL.dll"を検索しているようです。それは間違っているのですか? – Ani
"関数はすべてC++でエクスポートされます。"エクスポート宣言に 'extern" C "'を追加して通常の '__stdcall'エクスポート名を取得できますか?私は両方のタイプをインポートすることはできませんでした。 – Rup
申し訳ありませんが、エクスポートされた関数のすべてがextern "C"ブロックにラップされていることを説明する必要がありました。ここでは例として関数の1つを示していますが、DLL名については、これを入力するときに古いものと新しいものとの間で混乱してしまいました。正しいDLLを探していて、DLLNotFoundExceptionをスローします。すべての場所で正しいDLL名を持つようにコードを変更しました。 –