1

これが重複している場合は申し訳ありません。古い C++ アンマネージ dll と対話する必要があるクラスを作成しています。マネージ コードへのマッピングに苦労している方法が 1 つあります。

long DoSomething(int id, double* points, long numberOfPoints, bool useShaping)

これまでのところ、スタックの不均衡な例外をスローしない extern メソッドにそれをマップすることができませんでした。問題はダブルポインタにあります。メソッド シグネチャはマネージ コードで何を検索しますか? これは、例として機能しない私が試したものです。

[DllImport("Something.Dll", EntryPoint = "DoSomething")]
public static extern long DoSomething(int id, double[] points, long numberOfPoints, bool useShaping)
4

1 に答える 1

4

おそらく2つの問題があります-

  1. これには、おそらく呼び出し規約を指定する必要があります。
  2. C++ の「long」は、C# の「int」に対応します。

次のことを試してください。

[DllImport("Something.Dll", EntryPoint = "DoSomething", CallingConvention=CallingConvention.Cdecl)]
public static extern int DoSomething(int id, double[] points, int numberOfPoints, bool useShaping);
于 2012-06-25T19:55:52.750 に答える