Marshalling dynamic size array into struct

c#, marshalling, pinvoke, struct

Solution

Assuming that you want a struct containing a pointer to the array.

Declare the pointer to the array as `IntPtr` and marshal the array contents manually with `Marshal.AllocHGlobal`, `Marshal.Copy` etc.

Assuming that you want a variable sized struct rather than a struct containing a pointer to the array.

You cannot marshal a variable sized struct using p/invoke. You have at least these two options:

- Break the struct into two parameters.

- Marshal the struct manually with `Marshal.AllocHGlobal`, `Marshal.Copy` etc.

Problem

how can i define a struct with a dynamic sized array? is it right? ``` struct MyStruc { public int len; [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] public int buf[]; } ```

Original source