0

この構造化データは、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++ とマーシャリングにはあまり詳しくありません。どんな支援も大歓迎です。

4

1 に答える 1

1

同等の.netタイプを使用してc#で同様の構造を作成する必要があります。また、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;

ここにマイクロソフトからのいくつかの助けがあります。リンク

それでも問題が解決しない場合はお知らせください。

于 2012-04-06T22:44:57.550 に答える