Marshal.AllocHGlobal(Marshal.SizeOf(输入))错误

时间:2013-02-10 13:42:51

标签: c# pinvoke

input600是一个长度为600的浮点数组。

IntPtr ip = Marshal.AllocHGlobal(Marshal.SizeOf(input600));

上述语句会引发以下错误:

  

类型'System.Single []'不能作为非托管结构封送;   没有有意义的大小或偏移量可以计算出来。

这句话有什么问题?

1 个答案:

答案 0 :(得分:0)

来自Marshal.SizeOf(object)的文档:

  

此方法接受结构的实例,可以是a   引用类型或盒装值类型。布局必须是顺序或   明确的。

阵列不符合此要求。但是,您应该能够像这样计算空间要求,假设数组元素类型是具有所需布局的结构的基元:

IntPtr ip = Marshal.AllocHGlobal(Marshal.SizeOf(input600.GetType().GetElementType())*input600.Length);