在托管代码中分配内存使用:如何在非托管内存中分配IntPtr []的数组?
IntPtr [] params_list_n = new IntPtr [5];
但对于非托管内存我使用Marshal.AllocHGlobal
我不明白怎么回事,在这种情况下,为数组分配内存。
理想情况下,我想使用函数调用Marshal.GetNativeVariantForObject (o, params_list_n[i]);
对于数组的每个元素。
在托管代码中分配内存使用:如何在非托管内存中分配IntPtr []的数组?
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);
* sizeof *不能与IntPtr一起使用! – Mixer 2013-03-24 22:42:13
@Mixer固定 - 对不起,快速去过 – 2013-03-24 22:47:33
我忘记了'IntPtr.Size'。荣誉。 :) – eandersson 2013-03-24 22:48:16
谢谢。告诉我更多如何将内存从非托管复制到非托管。 Marshal.Copy不适合这个目的。我认为 – Mixer 2013-03-24 22:51:51