Laden...

Marshal.SizeOf mit [MarshalAs()] Strings

Erstellt von markus111 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.633 Views
markus111 Themenstarter:in
479 Beiträge seit 2008
vor 13 Jahren
Marshal.SizeOf mit [MarshalAs()] Strings

Hallo,

Marshal.SizeOf() wirft mir eine ArgumentException mit der Nachricht "Es kann keine sinnvolle Größe oder sinnvoller Offset berechnet werden, da der Typ "dhcp_test.DHCPPacket" nicht als nicht verwaltete Struktur gemarshallt werden kann." wenn ich die Größe meiner Struct bestimmen will.

Die Struct sieht so aus:

    public struct DHCPPacket
    {
        public byte op;
        public byte htype;
        public byte hlen;
        public byte hops;
        public uint xid;
        public ushort secs;
        public ushort flags;
        public uint ciaddr;
        public uint yiaddr;
        public uint siaddr;
        public uint giaddr;
        [MarshalAs(UnmanagedType.AnsiBStr, SizeConst=64)]
        public string sname;
        [MarshalAs(UnmanagedType.AnsiBStr, SizeConst=128)]
        public string file;
        [MarshalAs(UnmanagedType.AnsiBStr, SizeConst=312)]
        public string options;
    }

Gibt es eine Möglichkeit Marshal dazu zu bringen, das es mit die korrekte Größe ausgibt?

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
C
52 Beiträge seit 2010
vor 13 Jahren

Hi, hast du mal versucht ihm explizit das Layout anzugeben?


//edit ansi statt unicode in deinem fall
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
 public struct DHCPPacket
    {
        public byte op;
        public byte htype;
        .
        .
        .
    } 

Charset sollte für ihn ziemlich interessant sein! Davon hängt die Größe von sname bzw. file ab...