假设有一个具有如下所示纯 C 接口的本机函数,从本机 DLL 导出:
// 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 声明中省略它们吗?