如何在非托管内存中分配IntPtr []数组?

时间:2013-03-24 22:33:20

标签: c# arrays memory-management intptr alloc

要在托管代码中分配内存,请使用:

IntPtr [] params_list_n = new IntPtr [5];

但对于非托管内存,我使用Marshal.AllocHGlobal 我不明白在这种情况下如何为数组分配内存。

理想情况下我想使用函数调用Marshal.GetNativeVariantForObject (o, params_list_n[i]); 对于数组的每个元素。

2 个答案:

答案 0 :(得分:7)

使用Marshal.AllocHGlobal创建非托管内存很简单。

IntPtr pointer = Marshal.AllocHGlobal(1024);

如果您需要计算可以使用的空间量Marshal.SizeOf

int size = Marshal.SizeOf(typeof(IntPtr));
IntPtr pointer = Marshal.AllocHGlobal(size);

您还需要在项目中启用unsafe code才能运行。

  1. 右键单击您的项目,然后选择Properties
  2. 打开Build标签。
  3. 选择Allow unsafe code

答案 1 :(得分:2)

数组将是指向元素的指针。你以同样的方式使用它:

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);