Wie deklariere ich ein Array fester Größe eines Strukturtyps in C #:
%Vor%Dies wird zu CS1663 führen: Puffer mit fester Größe vom Struct-Typ sind nicht zulässig. Wie kann ich dies umgehen? Ich bevorzuge es, den C # - oder "Managed Collection data structure" -Typ nicht zu verwenden C ++
Wenn Ihre C # -Struktur nur primitive Datentypen verwendet und genau dasselbe Layout wie Ihre native Struktur in C ++ hat, können Sie diese Einschränkungen durch manuelle Speicherverwaltung und unsicheren Code umgehen. Als Bonus erhöhen Sie die Leistung, indem Sie das Marshalling vermeiden.
Ordnen Sie den Speicher zu:
%Vor% Dies ist im Grunde malloc
, also ist der zugewiesene Speicher außerhalb der Aufmerksamkeit des GC.
Sie können das IntPtr an nativen Code übergeben, als wäre es ein MyStruct[256]
und nur das IntPtr wird gemarshallt, nicht der Speicher, auf den es zeigt. Nativer und verwalteter Code kann direkt auf denselben Speicher zugreifen.
Um die Strukturen im Array mit C # zu lesen / schreiben, verwenden Sie C # -Zeiger:
%Vor%Vergiss nicht
%Vor% Wenn Sie mit dem Speicher fertig sind, in free
it.
Sie können nicht; gemäß der Definition
Die einzige Einschränkung besteht darin, dass der Array-Typ
bool
,byte
,char
,short
,int
,long
,sbyte
,ushort
,uint
,% sein muss. co_de%,ulong
oderfloat
Tags und Links arrays c# struct marshalling unsafe