Autor Beitrag
Kleinfeld
Hält's aus hier
Beiträge: 3



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


ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4060
Erhaltene Danke: 842

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Sa 11.02.17 10:52 
Hallo,

dein Array ist um eins zu klein (ein Array [0..6191] hat 6192 Werte):
ausblenden C#-Quelltext
1:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6192)]					

Und als FieldOffset gibt du dann für beide folgenden Records jeweils den gleichen Wert an:
ausblenden 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?).
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.02.17 19:51 
- Nachträglich durch die Entwickler-Ecke gelöscht -