title: C#: marshalling a struct that contains arrays
body: <p>I am doing some C# interop work. I have the following struct:</p>
  
  <pre><code>#pragma pack(push,1)
  typedef struct
  {
      unsigned __int64 Handle;
      LinkType_t Type;
      LinkState_t State;
      unsigned __int64 Settings;
      signed __int8 Name[MAX_LINK_NAME];
      unsigned __int8 DeviceInfo[MAX_LINK_DEVINFO];
      unsigned __int8 Reserved[40];
  } LinkInfo_t;
  </code></pre>
  
  <p>This is my attempt to convert it into a C# struct:</p>
  
  <pre><code>[StructLayout(LayoutKind.Sequential, Pack = 1)]
  public struct LinkInfo_t
  {
      [MarshalAs(UnmanagedType.U8)]
      public UInt64 Handle;
      MarshalAs(UnmanagedType.I4)]
      public LinkType_t Type;
      [MarshalAs(UnmanagedType.I4)]
      public LinkState_t State;
      [MarshalAs(UnmanagedType.U8)]
      public UInt64 Settings;
      [MarshalAs(UnmanagedType.LPStr, SizeConst = MAX_LINK_NAME)]
      public string Name;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_LINK_DEVINFO, ArraySubType = UnmanagedType.U1)]
      public byte[] DeviceInfo;
      [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40, ArraySubType = UnmanagedType.U1)]
      public byte[] Reserved;
  }
  </code></pre>
  
  <p>However, whenever I initialize the struct the Name, DeviceInfo, and Reserved fields are all set to null. How do I fix this?</p>