将动态大小数组编组到struct中

时间:2014-04-02 12:36:23

标签: c# struct pinvoke marshalling

如何定义具有动态大小数组的结构?

是不是?

struct MyStruc { 

    public int len; 
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)]
    public int buf[]; 
}

1 个答案:

答案 0 :(得分:3)

假设您需要一个包含指向数组的指针的结构。

将指向数组的指针声明为IntPtr,并使用Marshal.AllocHGlobalMarshal.Copy等手动编组数组内容。

假设您需要一个可变大小的结构而不是包含指向该数组的指针的结构。

您无法使用p / invoke封送变量大小的结构。您至少有以下两个选项:

  1. 将结构分成两个参数。
  2. 使用Marshal.AllocHGlobalMarshal.Copy等手动编组结构