将动态大小数组编组为结构体

gol*_*azo 5 c# pinvoke struct marshalling

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

这样对吗?

struct MyStruc { 

    public int len; 
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)]
    public int buf[]; 
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

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

声明的指针数组IntPtr和手动封送数组的内容Marshal.AllocHGlobalMarshal.Copy等等。

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

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

  1. 将结构分成两个参数。
  2. 手动封送结构Marshal.AllocHGlobalMarshal.Copy等等。