ネイティブ DLL からエクスポートされた、次のような純粋な C インターフェイスを持つネイティブ関数があるとします。
// NativeDll.cpp
extern "C" void __stdcall FillArray(
int fillValue,
int count,
int* data)
{
// Assume parameters are OK...
// Fill the array
for (int i = 0; i < count; i++)
{
data[i] = fillValue;
}
}
次の P/Invoke は正常に動作します (VS2010 SP1 でテスト済み)。
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
[In, Out] int[] data
);
この P/Invoke と同様に、上記と同じですが、属性はありません:[In, Out]
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
int[] data
);
では、これらの[In, Out]
属性は配列をマーシャリングするためのオプションですか? もしあれば、彼らの目的は何ですか?P/Invoke 宣言でそれらを省略してもよろしいですか?