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

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

这样对吗?

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

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

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

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

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

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