我有以下需要C Sharped的C ++代码。
int* pData = new int[128];
for(int i = 0; i < 128; i++)
{ pData[i] = i*2 ;}
此 pData int *稍后将作为void *
传递给函数现在我需要把所有这些都放在C#中。我所做的如下,
Int32[] tempData = new Int32[128];
for(int i = 0; i < 128; i++)
{ tempData[i] = i*2 ;}
int size = Marshal.SizeOf(tempData[0]) * tempData.Length;
IntPtr ptrData = Marshal.AllocHGlobal(size);
Marshal.Copy(tempData, 0, ptrData, tempData.Length);
稍后我将ptrData传递给C#函数。但是我得到了运行时错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
先谢谢。
答案 0 :(得分:2)
int size = sizeof(int) * tempData.Length;
IntPtr ptrData = Marshal.AllocHGlobal(size);
Marshal.Copy(tempData, 0, ptrData, size);
应该做的诀窍......