此结构化数据通过UDP连接发送。我可以读取UDP数据包,但是我在解析来自此C ++ Struct的数据时遇到了问题。
这是结构:
struct scanner_status{
// ---
u_short UDP_STATUS;
u_short TCP_COMMAND;
u_short TCP_LOGGING;
// scanner attributes
EPlatformModelNumber ModelNo;
string SerialNo;
bool bHasCT;
bool bHasPET;
bool bHasSPECT;
// physical
EBedType_mMM _eCurrBedType;
int_16 _CurrPallet;
bool _bTunnelPresent;
//
scanner_status()
: UDP_STATUS(u_short(~0))
, TCP_COMMAND(u_short(~0))
, TCP_LOGGING(u_short(~0))
, ModelNo(eUnknownPlatformModelNumber)
, bHasCT(false)
, bHasPET(false)
, bHasSPECT(false)
, _eCurrBedType(emMM_BedType_Unknown)
, _CurrPallet(-1)
, _bTunnelPresent(false)
{ }
};
decl_marshalling(scanner_status);
我想在C#中阅读这篇文章得到帮助,我对C ++和编组并不熟悉,所以非常感谢任何帮助。
答案 0 :(得分:1)
您需要在c#中使用等效的.net类型创建类似的结构。您还需要按如下方式装饰c#结构。确保顺序与c ++结构中的顺序相同,以确保内存布局相同。
[StructLayout(LayoutKind.Sequential)]
struct scanner_status{
// ---
[MarshalAs(UnmanagedType.U1)]
u_short UDP_STATUS;
[MarshalAs(UnmanagedType.U1)]
u_short TCP_COMMAND;
[MarshalAs(UnmanagedType.U1)]
u_short TCP_LOGGING;
以下是Microsoft的一些帮助。 Link
如果您仍有问题,请告诉我。