Thema: C# Zugriff auf Struct

Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Zugriff auf Struct

  Alt 11. Apr 2015, 22:40
Zunächst mal solltest du für unmanaged interop besser struct verwenden als Klassen.
(Zumindest habe ich struct verwendet, als ich sowas gemacht habe, ich bin mir daher sicher, dass es geht)

Was die folgende Konvertierung angeht, habe ich die Methoden hier benutzt:
Code:
 internal static byte[] struct2bytes<T>(T packet)
            where T:struct
        {
            int size = Marshal.SizeOf(packet);
            byte[] arr = new byte[size];
            IntPtr ptr = Marshal.AllocHGlobal(size);

            Marshal.StructureToPtr(packet, ptr, false);
            Marshal.Copy(ptr, arr, 0, size);
            Marshal.FreeHGlobal(ptr);

            return arr;
        }

        internal static T bytes2struct<T>(byte[] bytes)
            where T:struct
        {
            GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
            var s = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
            handle.Free();

            return s;
        }
Insbesondere die Methode Marshal.PtrToStructure sollte zu deinem Anwendungsfall passen
(Den Namespace System.Runtime.InteropServices einbinden!)
  Mit Zitat antworten Zitat