質問

私はC#アプリケーションにアンマネージコードのC ++ DLLから関数をインポートしようとしています。 C ++のプロトタイプです。

int somefunction (int param1, int *param2 = NULL);

どのように私はPARAM2のデフォルトの自然を活用するためにC#で、この宣言のですか?次のコードは動作しません。 PARAM2はゴミで初期化されます。

DllImportAttribute("mydll.dll", EntryPoint = "somefunction")]
public static extern int somefunction(int param1);
役に立ちましたか?

解決

あなたがC#4.0を使用している場合は、

は、その後dtb`s答えは正しいアプローチです。 C#4.0は、オプションのパラメータのサポートを追加し、彼らはのPInvoke機能と同じようにうまく動作します。

以前C#4.0にオプションのパラメータを利用する方法はありません。最も近い同等のは、その前方に他に一つの関数を定義することです。

[DllImport("mydll.dll", EntryPoint = "somefunction")] 
static extern int somefunction(int param1, IntPtr param2);

static int somefunction(int param1) {
  someFunction(param1, IntPtr.Zero);
}

他のヒント

試してみてください
[DllImport("mydll.dll", EntryPoint = "somefunction")]
static unsafe extern int somefunction(int param1, int* param2 = null);

または

[DllImport("mydll.dll", EntryPoint = "somefunction")]
static extern int somefunction(int param1, IntPtr param2 = default(IntPtr));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top