簡體   English   中英

通過 UDP 連接讀取 C# 中的 C++ 編組數據

[英]Reading this C++ Marshalled Data in C# over UDP connection

此結構化數據通過 UDP 連接發送。 我可以讀取 UDP 數據包,但我無法解析來自這個 C++ 結構的數據。

這是結構:

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++ 和編組並不十分熟悉,非常感謝任何幫助。

您需要在 c# 中使用等效的 .net 類型創建類似的結構。 您還需要按如下方式裝飾 c# 結構。 確保順序與 c++ 結構中的順序相同,因為您需要確保 memory 布局相同。

[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 的一些幫助。 關聯

如果您還有問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM