5

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

IntPtr [] params_list_n = new IntPtr [5];

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

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

4

2 回答 2

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
于 2013-03-24T22:39:48.383 回答
3

该数组将是指向元素的指针。您以相同的方式使用它:

IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);
于 2013-03-24T22:39:26.290 回答