Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - von "C" union nach Delphi was?
sky21 - Do 18.06.09 10:31
Titel: von "C" union nach Delphi was?
Hi all
Ich habe C Strukturen, welche ich nach Delphi (v2005) portieren muss. Mit dem Code habe ich nun massiv Probleme, die Union abzubilden. Angeblich kann eine Union in ein Delphi-case umgeschrieben werden. Aber bisherige Erfolge blieben aus. wer weiss Rat?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| struct MYPROJECT_NotificationVariant { MYPROJECT_TYPE_Notify eNotify;
union { MYPROJECT_STRUCT_SOMESTRUCT_1 _s1; MYPROJECT_STRUCT_SOMESTRUCT_2 _s2; MYPROJECT_STRUCT_SOMESTRUCT_3 _s3; // .... |
Delphi-Quelltext
1: 2: 3: 4: 5:
| type TMyProjectNotifyVariant = packed record eNotify : TMyProject_TYPE_Notify; end; |
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Do 18.06.2009 um 10:46
Sinspin - Do 18.06.09 12:34
Das ist eigentlich ganz Simpel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type MYPROJECT_STRUCT_SOMESTRUCT_1 = byte; MYPROJECT_STRUCT_SOMESTRUCT_2 = word; MYPROJECT_STRUCT_SOMESTRUCT_3 = integer; TMYPROJECT_NotificationVariant = record case integer of 0 : (_s1: MYPROJECT_STRUCT_SOMESTRUCT_1); 1 : (_s2: MYPROJECT_STRUCT_SOMESTRUCT_2); 2 : (_s3: MYPROJECT_STRUCT_SOMESTRUCT_3); end; |
Was ganz genau rauskommen muss kann ich dir natürlich nicht sagen da du nicht die ganze Definition rausgerückt hast. Aber an dem obigen Beispiel müsstest du erkennen wie du weitermachen kannst.
Martok - Do 18.06.09 17:23
Sinspin hat folgendes geschrieben : |
|
Und an dieser Feststellung hängt noch mehr: der Variante Teil kann in Delphi-Records nur am Ende stehen. In C muss das nicht unbedingt so sein. Falls nach der UNION noch was kommt, und soll das Ergebnis binärkompatibel sein, muss man sich ein wenig behelfen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| TVariantRec = packed record case byte of 0: (SomeIntVar: Integer); 1: (SomeDWORDVar: DWORD); end;
TLargerRec = paced record ABool: Boolean; VariantPart: TVariantRec; SomethingElse: Integer; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!