Konwertuję stary program Visual BASIC na język C#. Wysyła wiadomości do niektórych maszyn przemysłowych za pośrednictwem sieci Ethernet. W tym celu montuje strumień bajtów z porcji zdefiniowanych przez użytkownika o ustalonych rozmiarach.Jak ustawić typ użytkownika tablicy bajtowej o stałym rozmiarze w języku C#?
Większość z tych fragmentów są małe i C# łatwo stworzyć konstrukcjom kilku bajtów lub wskazówki i kontrolować ich wielkość i układ używając StructLayout użytkownika, na przykład
[StructLayout(LayoutKind.Sequential, Pack = 1)]
... więc kiedy idziemy do niezarządzane miejsce na kopię bytową, nie mamy kolejności bajtów ani problemów z dopełnieniem.
Ale niektóre ze struktur VB6 są duże tablice, na przykład,
Private Type SEND_MSG_BUFFER_320_BYTES
bytes(0 To 319) As Byte '320 bytes
End Type
i jestem zmaga się z, jak to zrobić w języku C#. Mogę zrobić stałą tablicę rozmiarze w klasie, np
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class SOME_BYTES
{
public byte[] b = new byte[320];
}
jednak zrobić kopię bajtowy mądry muszę być w stanie odkryć rozmiar w czasie wykonywania i System.Runtime.InteropServices.Marshal. SizeOf zwraca do tego .
Wszelkie sugestie, jak to zrobić, zostaną docenione.
To działa. Zdecydowanie muszę przeczytać więcej na temat całej gamy usług InteropServices/MarshallAs, ponieważ wygląda na to, że będę pod ich pachami dla tego projektu! – user316117