古いVisualBASICプログラムをC#に変換しています。イーサネットを介して一部の産業機械にメッセージを送信します。これを行うために、固定サイズのユーザー定義チャンクからバイトのストリームをアセンブルします。
これらのチャンクのほとんどは小さく、C#では、たとえばStructLayoutを使用して、数バイトまたはintの構造体を作成し、それらのサイズとレイアウトを制御するのは簡単です。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
...したがって、バイト単位のコピーを実行するためにアンマネージスペースに入る場合、バイト順序やパディングの問題は発生しません。
ただし、VB6構造の一部は大きなアレイです。たとえば、
Private Type SEND_MSG_BUFFER_320_BYTES
bytes(0 To 319) As Byte '320 bytes
End Type
そして私はC#でこれを行う方法に苦労しています。クラスで固定サイズの配列を作成できます。たとえば、
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class SOME_BYTES
{
public byte[] b = new byte[320];
}
しかし、バイト単位のコピーを行うには、実行時にこれのサイズを検出できる必要があり、System.Runtime.InteropServices.Marshal.SizeOfはこれに対して4を返します。
これをどのように行うかについての提案は大歓迎です。