typedef struct __BBBB
{
char chCom[10];
 }strBbbb;
typedef struct __CCCC
{
strBbbb strCom[20] ; 
 }strCccc;
这个C++的结构体转换成C#是啥样子啊?

解决方案 »

  1.   

    语法类似这样:
     [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
            internal struct KeyEventRecord
            {
                internal bool keyDown;
                internal short repeatCount;
                internal short virtualKeyCode;
                internal short virtualScanCode;
                internal char uChar;
                internal int controlKeyState;
            }
      

  2.   

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 10)]
    public struct strBbbb
    {
    char[] chCom;
     }
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 20)]
    public struct strCccc
    {
    strBbbb[] strCom; 
     }
    不知道这样对不对,而且新的问题出来了strCccc怎么计算它的大小?
      

  3.   

    可以用sizeof,因为结构体是值类型,
    LZ可以参阅MSDN sizeof关键字用法
      

  4.   

    刚有个错误,struct虽然是值类型但在MSDN已经说明了:对于所有其他类型(包括 struct),sizeof 运算符只能在不安全代码块中使用。虽然可以使用 SizeOf 方法,但该方法返回的值和 sizeof 返回的值并不总是相同的。Marshal.SizeOf 在已封送处理类型后返回大小,而 sizeof 返回公共语言运行库分配的大小(包括任何空白)。
      

  5.   

    struct __BBBB
    {
        public char []chCom = new char[10];
     }
    struct __CCCC
    {
        public __BBBB []strCom = new __BBBB[20]; 
     }
      

  6.   

    O,2楼的我贴错了。
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
    public struct strBbbb
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        char[] chCom;
     }
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
    public struct strCccc
    {
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        strBbbb[] strCom; 
     }