要在托管代码中分配内存,我使用:
IntPtr [] params_list_n = new IntPtr [5];
但是对于我使用的非托管内存Marshal.AllocHGlobal
而且我不明白在这种情况下如何为数组分配内存。
理想情况下,我想对Marshal.GetNativeVariantForObject (o, params_list_n[i]);
数组的每个元素使用函数调用。
要在托管代码中分配内存,我使用:
IntPtr [] params_list_n = new IntPtr [5];
但是对于我使用的非托管内存Marshal.AllocHGlobal
而且我不明白在这种情况下如何为数组分配内存。
理想情况下,我想对Marshal.GetNativeVariantForObject (o, params_list_n[i]);
数组的每个元素使用函数调用。
使用Marshal.AllocHGlobal创建非托管内存很简单。
IntPtr pointer = Marshal.AllocHGlobal(1024);
如果您需要计算可以使用Marshal.SizeOf的空间量。
int size = Marshal.SizeOf(typeof(IntPtr));
IntPtr pointer = Marshal.AllocHGlobal(size);
您还需要unsafe code
在项目中启用它才能运行。
Properties
.Build
选项卡。Allow unsafe code
。该数组将是指向元素的指针。您以相同的方式使用它:
IntPtr results = Marshal.AllocHGlobal(5 * IntPtr.Size);