我有一个在C#中声明的COM方法签名:
void Next(ref int pcch,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)]
char[] pchText);
我这样称呼它:
int cch = 100;
var buff = new char[cch];
com.Next(ref cch, buff);
.NET互操作层是否会首先将整个数组复制到临时的非托管内存缓冲区,然后再复制回来?还是该数组会自动被固定并通过引用传递?
为了尝试一下,我在COM对象(C ++)中这样做:
*pcch = 1;
pchText[0] = L'A';
pchText[1] = L'\x38F'; // 'Ώ'
当我检查 C# 中的 buff[1]
时,我确实会得到 'Ώ'
返回值。但我不认为这是数组被固定而不是来回复制的有力证据。
[In, Out]
:http://stackoverflow.com/q/25039290/2674222。 - avo