Entwickler-Ecke
C# - Die Sprache - Record mit array aus Delphi übersetzen
Boldar - Mo 26.07.10 10:53
Titel: Record mit array aus Delphi übersetzen
Hallo,
ich habe folgende Struktur in Delphi-Code, den ich nach C# übersetzen muss
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type _USBCANSEND = record dwID: dword; byNBytes: BYTE; dwRX_TX_no: dword; dat: Array[0..7] of Byte; end; |
Wie mache ich ein stastisches array in ein struct?
Es geht um die Übergabe an eine dll, also müssen die Typen genau stimmen.
mfg Boldar
Trashkid2000 - Mo 26.07.10 11:36
Hallo Boldar,
müsste meiner Meinung nach eigentlich so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public struct USBCANSEND { public static uint dwID; public static byte byNBytes; public static uint dwRX_TX_no; public static byte[] dat; } |
Ein dword wäre laut meiner Auffassung ein uint. Habe aber auch schon irgendwo gesehen, dass es zu einem int übersetzt worden ist!?
Naja, kannst Du ja mal testen.
Grüsse, Marko
Th69 - Mo 26.07.10 11:48
Das Stichwort heißt "Marshal" bzw "Marshalling".
Du erzeugst einfach eine Struktur in C# und verwendest dann das "MarshalAs"-Attribut für die Detailangaben, z.B.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| struct X { public uint Id; public byte NBytes; public uint RX_TX_no;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)] public byte[] dat; } |
Es gibt auch noch ein paar weitere Attribute, z.B. "StructLayout" und "FieldOffset".
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!