J'utilise la définition suivante pour ma structure :
[StructLayout(LayoutKind.Explicit)]
public struct NetworkMessage
{
[FieldOffset(0)]
public MessageType Type;
[FieldOffset(4)]
public bool GatewayMessage;
//AuthenticationRequest
[FieldOffset(5)]
public char[] AuthenticationUsername; //20 charachters long
[FieldOffset(13)]
public byte[] AuthenticationPasswordHash; // 16 bytes long
//Authntication result
[FieldOffset(5)]
public bool AuthenticationSuccess;
[FieldOffset(6)]
public char[] AuthenticationMessage;
}
Cependant, lorsque j'essaie d'utiliser ce type, j'obtiens le message d'erreur suivant :
System.TypeLoadException : Impossible de charger le type 'NetworkMessage' à partir de l'assemblage car il contient un champ d'objet à l'offset 5 qui est incorrectement aligné ou chevauché par un champ non-objet.
Un champ non-objet signifie-t-il que l'un est une valeur et l'autre une référence ? Ne puis-je pas les mélanger ?
Toute aide est la bienvenue.
Merci, Venatu
EDIT : Mes excuses, j'aurais dû être plus explicite sur le fait que j'envisage ceci comme une sorte de pseudo-union. Le chevauchement des champs est intentionnel pour me permettre d'utiliser une structure comme plusieurs types de messages, ce qui facilite la mise en mémoire tampon et le passage dans le système. Désolé pour la confusion