Entwickler-Ecke

C# - Die Sprache - Variant nach C#


Kleinfeld - Sa 11.02.17 01:23
Titel: Variant nach C#
Weiß jemand wie ich folgende Structure mit einem Variant nach C# konvertieren kann?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type SharedMem=packed record
  CurrentMem: array [0..6191of byte;
  case integer of
    1: (Exception: record32);
    2: (Exception: record32);
end;


Den Array würde ich mittels:


C#-Quelltext
1:
2:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6191)]
    public byte[] CurrentMem;


übersetzen. Aber wie ich den nachfolgenden Variant übersetze weiß ich leider nicht.
//edit: Record32 ist übrigens auch eine Structure. Hatte zuerst überlegt mit FieldOffset, aber ich weiß die Größe des Structure nicht.


Th69 - Sa 11.02.17 10:52

Hallo,

dein Array ist um eins zu klein (ein Array [0..6191] hat 6192 Werte):

C#-Quelltext
1:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6192)]                    

Und als FieldOffset gibt du dann für beide folgenden Records jeweils den gleichen Wert an:

C#-Quelltext
1:
[FieldOffset(6192)]                    

Aber ist das wirklich der originale Delphi-Code, denn dann ergibt der Variant-Anteil doch keinen Sinn, wenn beide case denselben Inhalt haben (geht das überhaupt, daß beide Variablen gleich heißen?).


Delete - Sa 11.02.17 19:51

- Nachträglich durch die Entwickler-Ecke gelöscht -