私は関数をC++で書いています。これはdllに入れて、C#でDllImportを使っています。すべてがうまくいく。私はC++から戻り値を取得し、それを私のC#GUIに表示することができます。今私はその関数に追加し、複数の値を返すようにしたい(3つまで)。私はReturn C++ array to C#とHow to return two different variable in c++?で与えられたメソッドを試しましたがどちらも動作しません。 最初の投稿のコードは私にアクセス違反エラーを与え、2番目のコードフォームは構造体のすべての0の値を返します。最初のコードでは、指定されたコードを正確にコピーして実行しようとしましたが、無駄にしました。これらのメソッドによって与えられたエラーと間違った値の原因は何ですか?どうすればそれらを働かせることができますか?配列と構造体をC++関数から返す#
場合によっては、2番目の投稿を実装した自分のコードは以下のとおりです。
bisection.cpp
Result bisection(double l, double u, double stoppingError, int maxIter) {
//code for this function
result.root = xr;
result.relError = e;
result.absError = 1;
return result;
}
C#コード
[StructLayout(LayoutKind.Sequential)]
public struct Result
{
public double root;
public double relError;
public double absError;
}
[DllImport(dllPath)]
private static extern Result bisection(double l, double u, double stoppingError, int maxIter);
Result result = bisection(data[0], data[1], 0.1, 100);
ヘッダーには 'bisection'が' double'を返しますが、実装は 'Result'を返します。 – PaulMcKenzie
ああ!ここに投稿するコードを編集していたときの間違い。私はそれを修正しました。 – Aeleon
Resultを返す代わりにoutパラメータとして渡し、渡されたC++コードに 'Result'を記入する方が良いかもしれません。これは、 "GetMessage'のように"構造体を返す "必要があるWindows API関数を呼び出す方法のモデルに従います。 – PaulMcKenzie