Zeiger auf T



  • hi ich hab ein prble,. ich will einen zeiger auf einen Typ T inerhalb einer generischen methode machen, aber das geht nicht es kommt immer die fehlermeldung "Fehler 128 Es ist nicht möglich, einen Zeiger für den verwalteten Typ ("T") zu deklarieren oder dessen Adresse oder Größe abzurufen."

    hier mal mein code der kritische routine:

    void SetValue<T>(T[] data, uint size, IntPtr address)
                where T : struct
            {
                unsafe
                {
                    uint bsize = size * sizeof(T);
                    byte[] bdata = new byte[bsize];
                    fixed (T* srcPi = &data[0])
                    {
                        IntPtr srcP = (IntPtr)srcPi;
                        Marshal.Copy(srcP, bdata, 0, (int)bsize);
                        SetValue(bdata, bsize, address);//void SetValue(byte[] data, uint size, IntPtr address)
                    }
                }
            }
    

    bei derselben routione mit int gabs keine probleme:

    void SetValue(int[] data, uint size, IntPtr address)
            {
                unsafe 
                {
                    uint bsize = size * sizeof(int);
                    byte[] bdata = new byte[bsize];
                    fixed (int * srcPi = &data[0])
                    {
                        IntPtr srcP = (IntPtr)srcPi;
                        Marshal.Copy(srcP, bdata, 0, (int)bsize);
                        SetValue(bdata, bsize, address);
                    }
                }
            }
    

    kann mir da jmd helfen?



  • So viel ich weiß kann man die "unsafe" Zeiger nur mit bestimmten Datentypen benutzen (d.h. byte, int, etc.) und nicht allgemein für jede beliebige Managed-Struktur.
    s.a. http://www.codeproject.com/KB/dotnet/ReadingStructures.aspx (Solution Attempt 4: Unsafe Generic Approach)


Log in to reply