.Net Socket Send()メソッドで一部の工場設備に送信するバイトのバッファーを構築しているため、バイトの順序が重要になります。しかし、「[StructLayout(LayoutKind.Sequential 」を使用しても、Visual Studio 2010デバッガーは指定したものとは異なるシーケンスを表示することに気付きました。たとえば、
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class K_NEWFILEGET_START
{
public K_HEADER Header = new K_HEADER();
[System.Runtime.InteropServices.MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] fileName = new byte[32];
public globals.INT2_Type crc = new globals.INT2_Type();
}
それから私はします
K_NEWFILEGET_START msg = new K_NEWFILEGET_START();
デバッガーでは、が表示されます。。。
- msg {xxxxx.yyy.K_NEWFILEGET_START}
+ crc {xxxxx.globals.INT2_Type}
+ fileName {byte[32]}
+ Header {xxxxx.yyy.K_HEADER}
(独自のものがxxx化されました)この例では逆の順序ですが、デバッガーに表示される順序がさまざまな方法でスクランブルされている他の例があります。
さらに一歩進んで、ネットワークスニファを使用してネットワーク上の実際の出力を調べると、指定した順序が正しいように見えるので、デバッガーに問題があるようですが、正しく表示したいと思います。ところで、デバッガーオプションで「変数ウィンドウにオブジェクトの生の構造を表示する」を設定しています。前もって感謝します!