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

Mix*_*xer 5 c# arrays memory-management intptr alloc

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

IntPtr [] params_list_n = new IntPtr [5];
Run Code Online (Sandbox Code Playgroud)

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

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

ean*_*son 7

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

IntPtr pointer = Marshal.AllocHGlobal(1024);
Run Code Online (Sandbox Code Playgroud)

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

int size = Marshal.SizeOf(typeof(IntPtr));
IntPtr pointer = Marshal.AllocHGlobal(size);
Run Code Online (Sandbox Code Playgroud)

您还需要unsafe code在项目中启用此功能.

  1. 右键单击您的项目并选择Properties.
  2. 打开Build选项卡.
  3. 选择Allow unsafe code.