问题描述
typedefstruct__BBBB{charchCom[10];}strBbbb;typedefstruct__CCCC{strBbbbstrCom[20];}strCccc;
这个C++的结构体转换成C#是啥样子啊?
解决方案
解决方案二:
语法类似这样:[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]internalstructKeyEventRecord{internalboolkeyDown;internalshortrepeatCount;internalshortvirtualKeyCode;internalshortvirtualScanCode;internalcharuChar;internalintcontrolKeyState;}
解决方案三:
[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=10)]publicstructstrBbbb{char[]chCom;}[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=20)]publicstructstrCccc{strBbbb[]strCom;}
不知道这样对不对,而且新的问题出来了strCccc怎么计算它的大小?
解决方案四:
可以用sizeof,因为结构体是值类型,LZ可以参阅MSDNsizeof关键字用法
解决方案五:
刚有个错误,struct虽然是值类型但在MSDN已经说明了:对于所有其他类型(包括struct),sizeof运算符只能在不安全代码块中使用。虽然可以使用SizeOf方法,但该方法返回的值和sizeof返回的值并不总是相同的。Marshal.SizeOf在已封送处理类型后返回大小,而sizeof返回公共语言运行库分配的大小(包括任何空白)。
解决方案六:
struct__BBBB{publicchar[]chCom=newchar[10];}struct__CCCC{public__BBBB[]strCom=new__BBBB[20];}
解决方案七:
O,2楼的我贴错了。[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=1)]publicstructstrBbbb{[MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]char[]chCom;}[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=1)]publicstructstrCccc{[MarshalAs(UnmanagedType.ByValArray,SizeConst=20)]strBbbb[]strCom;}