C#如何封装C++嵌套结构体,是结构体里面嵌套了多个结构体

C++中的结构体:
大结构体:
struct{ DWORD dwSize;
DWORD dwGroupNum;
DWORD dwAChanNum;
DWORD dwDChanNum;
DWORD dwStartDChan;
BYTE byAnalogChanEnable[MAX_CHANNUM_V30];NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40];NET_DVR_STREAM_MODE struStreamMode[MAX_CHANNUM_V30]; BYTE byRes2[20];}NET_DVR_IPPARACFG_V40, *LPNET_DVR_IPPARACFG_V40;

子结构体:
struct{ BYTE byEnable;
BYTE byProType;
BYTE byEnableQuickAdd;
BYTE byRes1;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
BYTE byDomain[MAX_DOMAIN_NAME];
NET_DVR_IPADDR struIP;
WORD wDVRPort;
BYTE byRes2[34];}NET_DVR_IPDEVINFO_V31, *LPNET_DVR_IPDEVINFO_V31;

struct{ BYTE byGetStreamType;
BYTE byRes[3];
NET_DVR_GET_STREAM_UNION uGetStream;}NET_DVR_STREAM_MODE,*LPNET_DVR_STREAM_MODE;

我先贴出来第一层结构体和里面嵌套的两个小的结构体,小结构体里面嵌套的结构体就不贴了,其中 NET_DVR_IPADDR和 NET_DVR_GET_STREAM_UNION是子结构体里面用到的结构体。高手指教下,谢谢!

看你的定义里有数组,有Struct嵌套,给你的例子参考:C++: typedef struct{
BYTE ByteV[10];
} StructA;

typedef struct
{
BYTE ByteV[10];
StructA StructAs[20];

} StructB;

C#: [StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)]
public struct StructA
{
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=10)]
public byte[] ByteV;
};

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct StructB
{
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=10)]
public byte[] ByteV;

[ MarshalAs( UnmanagedType.ByValArray, SizeConst=20)]
public StructA[] StructAs;
};

-手写的,仅供参考
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-03
在Visual C++里添加如下程序:
struct A
{
    int a;
    struct B * b;
};

struct B
{
     int b;
     struct A * a;
};

struct C
{
     int c;
    struct B * b;
     struct A * a;
};

..........

第2个回答  2015-11-25
看你的定义里有数组,有Struct嵌套,给你的例子参考:C++: typedef struct{
BYTE ByteV[10];
} StructA;

typedef struct
{
BYTE ByteV[10];
StructA StructAs[20];

} StructB;

C#: [StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)]
public struct StructA
{
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=10)]
public byte[] ByteV;
};

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct StructB
{
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=10)]
public byte[] ByteV;

[ MarshalAs( UnmanagedType.ByValArray, SizeConst=20)]
public StructA[] StructAs;
};

-手写的,仅供参考
相似回答