Array fester Größe vom Typ Struktur

8

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 ++

    
uray 01.11.2011, 23:03
quelle

2 Antworten

9

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.

    
Mikayla Hutchinson 01.11.2011, 23:25
quelle
3

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 oder float

    
Marc Gravell 01.11.2011 23:06
quelle

Tags und Links