0

C++ で以前に作成された DLL と対話する C# を配置するプロジェクトに取り組んでいます。以下のコードは、必要な関数をエクスポートする方法を示しています。

extern "C" __declspec(dllexport) int iterateAndTest(int testSize, char* testHash){

CUDADLL dll;
int ret = dll.iterateAndTest(testSize, testHash);
return ret;
}

以下のコードは、C# で関数を宣言する方法を示しています。

[DllImport("C:\\Users\\BrunoBraga\\Documents\\Visual Studio 2012\\Projects\\CUDADLL\\Debug\\CUDADLL.dll")]
public static extern int iterateAndTest(int testSize, string testHash);

問題は、dll 関数が何も返さないことです。実際、一度呼び出された dll は C# に戻ることはなく、プログラムは単純に終了します。

正しいコードを提供しているかどうかはわかりませんが、欠落しているdllについて何かがあると思います。

返信が遅れて申し訳ありません。2 つの問題がありました。new がなくても内部フィールドにアクセスできたので、これができると思いました。;

2-プログラムは管理者で実行する必要があります。そうしないと、クラッシュが発生します。

みんなありがとう。

4

1 に答える 1

1

あなたのC ++コードに挿入__stdcall

extern "C" __declspec(dllexport) __stdcall int iterateAndTest(int testSize, char* testHash);

C#で

[DllImport("yourdll.dll", EntryPoint="iterateAndTest", CallingConvention=CallingConvention.StdCall)]
public static extern int iterateAndTest(int testSize, string testHash);

Visual Studio を使用している場合、C++ 関数で使用coutします。関数が呼び出された場合、出力は出力ウィンドウに表示されます。C++ dll を出力ディレクトリに配置してみてください

考えられるエラー: dll が見つからないか、エントリ ポイントの例外がスローされます。

于 2013-01-24T06:59:03.727 に答える