私がやっているP/Invoke呼び出しに問題があります。私はC#プログラムからC++クラスを呼び出さなければなりません。私はこのクラスのソースを持っているので、私はDLLプロジェクトにそれを入れ、その主要なメソッドにアクセスするためのエクスポート関数を作成します。それは私が必要としていることをし、物事を簡単にするのに十分なはずです。P/Invokeでダブルパラメータを整理する
extern "C" _declspec(dllexport) void Inference(double *c1, double *c2, double *c3, double *result)
{
/* somecode */
}
これは、コンパイルし、私はdumpbin
出力の輸出を見ることができます:
マイ輸出方法は次のようになります。
さて問題は、管理 のPInvokeシグネチャが一致しないため、
は、私はこれでメソッドを呼び出してみました:これは可能性があることを私に言って、私はいつも
PInvokeStackInbalance
例外を取得するので、私は私のC#のコードからこのメソッドを呼び出すことはできません アンマネージドターゲットシグネチャ。
[DllImport("InferenceEngine.dll")]
extern static unsafe void Inference(double *c1, double *c2, double *c3, double *result);
は、私もこれを試してみました:MSDNではなく、運を文書化し、両方の可能な方法だった
[DllImport("InferenceEngine.dll")]
extern static void Inference(ref double c1, ref double c2, ref double c3, ref double result);
...。問題が何であるか誰にも手掛かりがありますか?
ありがとうございます!
C#コードから「C++クラス」を呼び出すことはできません。しかし、それは1のように見えません。 –
'ref double'または' out double'はパラメータを宣言する正しい方法です - 助けがあれば 'unsafe'を使い始めないでください –
Hans:extern関数はクラスではありませんが、 。私はちょうど外部からの呼び出しをより簡単にするための単純なfunctoinを行いました。 – Shtong