C ++到C#Marshaling

时间:2011-07-29 12:47:57

标签: c# marshalling

我有以下需要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#函数。但是我得到了运行时错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

先谢谢。

1 个答案:

答案 0 :(得分:2)

int size = sizeof(int) * tempData.Length;
IntPtr ptrData = Marshal.AllocHGlobal(size);
Marshal.Copy(tempData, 0, ptrData, size);

应该做的诀窍......