古い Visual BASIC プログラムを C# に変換しています。このプログラムは、シリアルまたはイーサネット回線を介して一部の産業機械にメッセージを送信します。これを行うために、メッセージのバイト配列を作成します。
問題は、多くの(~50) の異なるメッセージ形式があり、それぞれがVB6でユーザー定義型として定義されていることです。例えば。
Public Type K_QCHECK
Header As K_HEADER3
Count As LNG4
crc As INT2
End Type
(LNG4 と INT2 はカスタム タイプです) 自動変換ツールを使用して VB6 コードを実行すると、C# 構造体が得られます。
public struct K_QCHECK
{
public K_HEADER3 Header;
public LNG4 Count;
public INT2 crc;
}
しかし、古い VB6 コードは、LSet を使用してこれらをバイト配列にコピーしていました。これは、型がメモリの連続したブロックを表すという仮定に依存していました。しかし、C# では、コンパイラによってメモリ内に配置される方法は、プログラマがアクセスできない実装の詳細であると想定されています。
では、これらの異なる構造体の内容をバイト配列に取得する最良の方法は何でしょうか? それぞれをクラスにして、それに CopyToByteArray メソッドまたは演算子を与えることもできますが、これらは 50 個あるので、大変な作業のように思えます。提案をお寄せいただきありがとうございます。