привет. есть структура на с
Код | typedef struct __eth_header__ { UCHAR DstMAC[6]; UCHAR SrcMAC[6]; USHORT EthType; } t_eth_head;
typedef struct __packet__ { t_eth_head header; UCHAR data[50]; } ь_packet;
|
вот так описал на с#
Код | [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct t_eth_head { /// UCHAR[6] [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 6)] public string DstMAC; /// UCHAR[6] [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 6)] public string SrcMAC; /// USHORT->unsigned short public ushort EthType; }
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct t_packet { /// t_eth_head->__eth_header__ public t_eth_head header; /// UCHAR[50] [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 50)] public string data; }
|
сигнатура
Код | [DllImport("my_dll.dll", EntryPoint = "DoReadProc", CallingConvention = CallingConvention.Cdecl)] public static extern bool DoReadProc(ref t_packet p);
|
и примерно такой вызов
Код | static void Main(string[] args) { //...
t_packet pckt = new t_packet(); while (true) { if (DoReadProc(ref pckt)) break; } //.. }
|
данные на стороне "си" успешно записываются, но в мак адресе или в данных встречается 0х00,а так как указан тип public string DstMAC; то всё что после 0х00 отбрасывается. как мне исправить, описать структуру на стороне c#?
|