C# 向 C++dll传递数组的问题
eakey 2019-04-18 11:54:12 有没有懂c#和c++的高手,问下,我在c#和c++间传递一个数组:
C++写的dll导出的函数
extern "C" __declspec(dllexport) int __stdcall SetBuf(int *Buffer, int Len);
{
Buffer[0] = 123;
}
C#的界面调用C++写的dll:
[System.Runtime.InteropServices.DllImport(@"Proc.dll",
EntryPoint = "SetBuf",
CharSet = System.Runtime.InteropServices.CharSet.Ansi,
CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
private static extern int SetPP(int[] Buffer, int Len);
如上,在C++的dll上改变Buffer[0] 的值,C#中Buffer[0]的值也跟着改变,这说明dll直接访问了C#的内存,而不是复制一个数组到dll,这会不会造成隐患?比如dll还在读数组呢,C#垃圾回收调整了数组的位置甚至回收了整个数组?