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

C# 如何在非托管内存中分配IntPtr[]数组?,c#,arrays,memory-management,intptr,alloc,C#,Arrays,Memory Management,Intptr,Alloc,要在托管代码中分配内存,我使用: IntPtr [] params_list_n = new IntPtr [5]; 但对于非托管内存,我使用Marshal.AllocHGlobal 我不明白在这种情况下如何为数组分配内存 理想情况下,我希望使用函数调用Marshal.GetNativeVariantForObject(o,params_list_n[I]) 对于数组的每个元素。数组将是指向元素的指针。您使用它的方式相同: IntPtr results = Marshal.AllocHGlob

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

IntPtr [] params_list_n = new IntPtr [5];
但对于非托管内存,我使用
Marshal.AllocHGlobal
我不明白在这种情况下如何为数组分配内存

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

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

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

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

IntPtr pointer = Marshal.AllocHGlobal(1024);
如果需要计算可以使用的空间量

您还需要在项目中启用
不安全代码
,才能运行此功能

  • 右键单击项目并选择
    属性
  • 打开
    Build
    选项卡
  • 选择
    允许不安全代码

  • @混音器已修复-抱歉,我忘记了
    IntPtr.Size
    。荣誉.)非常感谢。但我无法访问数组的各个元素。这不是我所需要的。我想使用函数调用Marshal.GetNativeVariantForObject(o,params_list_n[I]);对于数组的每个元素。谢谢。告诉我更多如何将内存从非托管复制到非托管。封送员。副本不适用于此目的。据我所知
    int size = Marshal.SizeOf(typeof(IntPtr));
    IntPtr pointer = Marshal.AllocHGlobal(size);