在将数组发送到非托管代码之前是否会固定数组?

时间:2013-02-11 01:10:42

标签: c# c++ pinvoke unmanaged

假设我想从C#调用非托管C ++函数。 C ++函数有以下原型:

int doSomething(int arraySize, int* array)

我从C#调用函数如下:

[DllImport(MyLibrary, CallingConvention = CallingConvention.Cdecl)]
public static int doSomething(int arraySize, int[] array)

int[] myArray = new int[] { 1, 2, 3 };
doSomething(myArray.Length, myArray);
  1. 当我这样做时,myArray被固定了吗?当非托管库正在处理它时,垃圾收集器是否有可能将阵列移动到其他位置?
  2. 如果它没有自动固定,我该怎么做才能固定它?
  3. 如果它被自动固定,何时再次取消固定?

0 个答案:

没有答案