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);