0

我正在准备将指针投射到通用结构(可blittable)。当我使用非泛型结构时,一切似乎都很好 => 然后我可以使用 Marshal.PtrToStructure(...) 但该函数不接收泛型结构(为什么?)

所以我写了以下内容:

public static object ReadValue<T>(IntPtr ptr) where T : struct
    {
        var dm = new DynamicMethod("$", typeof(T), Type.EmptyTypes);
            ILGenerator il = dm.GetILGenerator();
            il.Emit(OpCodes.Ldc_I4, ptr.ToInt32());
            il.Emit(OpCodes.Ldobj, typeof(T));
            il.Emit(OpCodes.Ret);

            var func = (Func<T>)dm.CreateDelegate(typeof(Func<T>));
            return func();
    }

但是现在 Ldobj 指令出了点问题。VS 给我:附加信息:操作可能会破坏运行时的稳定性。

我究竟做错了什么 ?有谁知道解决这个问题的更好方法(指向通用结构)或者发现这个函数有错误?

4

1 回答 1

1

我不确定这是否适用于通用指针,但.net 中有一种方法可以在类型之间进行低级转换。它涉及 StructLayout 属性和 FieldOffset 为 0 的多个字段。

http://netpl.blogspot.com/2010/10/is-net-type-safe.html

于 2013-08-10T21:28:26.383 回答