Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Marshalling dynamic size array into struct

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[]; 
}
like image 910
golazo Avatar asked Apr 02 '14 12:04

golazo


1 Answers

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:

  1. Break the struct into two parameters.
  2. Marshal the struct manually with Marshal.AllocHGlobal, Marshal.Copy etc.
like image 174
David Heffernan Avatar answered Sep 23 '22 23:09

David Heffernan