Marshaling C ++ struct avec un tableau de taille fixe en C #

J’ai une structure C # déclarée comme suit:

public struct AdvertisementData { public byte SomeId; [MarshalAs(UnmanagedType.LPArray , SizeConst = 12)] public byte[] AnArray; } 

Et c’est l’équivalent C ++:

 struct AdvertisementData { uint8_t SomeId; uint8_t AnArray[12]; }; 

Lorsque j’essaie d’envoyer une référence de C ++ à C # à une instance allouée à la stack de la structure ci-dessus, je reçois: “Le champ de structure de type Byte [] ne peut pas être organisé en tant que LPArray.” Une idée de ce que je fais mal?

Essayez de le classer comme ByValArray:

  [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public byte[] AnArray; 

Et aussi, êtes-vous sûr de ne pas avoir besoin de définir LayoutKind pour votre structure?