ネイティブDLLからエクスポートされた以下のような純粋-Cインタフェースを備えたネイティブ関数があると仮定する:マーシャル配列のP/Invoke [In、Out]属性はオプションですか?
// 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 /呼び出しは、(VS2010 SP1で試験)正常に動作:
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
[In, Out] int[] data
);
ならびに上記同様、このP /呼び出し、が、[In, Out]
せずは属性:
[DllImport("NativeDll.dll", CallingConvention=CallingConvention.StdCall)]
public static extern void FillArray(
int fillValue,
int count,
int[] data
);
[In, Out]
アトリビュートアライメントアレイの場合はですか? その目的は何ですか? P/Invoke宣言でそれらを省略することはできますか?
私は人生の多くの時間をx86/x64/'Any CPU'の間のマーシャリングエフェクトのトラブルシューティングに費やしました... – JerKimball