铸造指针通用结构(Cast pointer to generic structure)

2019-11-02 08:44发布

我装盘的指针转换为一个通用的结构(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给我:附加信息:操作可能会破坏运行。

我究竟做错了什么 ? 有谁知道这个问题的更好的方法(PTR仿制结构)或已在此功能有误?

Answer 1:

我不知道这是否与通用指针但在.NET中类型之间投低级别的一种方式。 它涉及到在0 FieldOffset的StructLayout属性和多个领域。

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



文章来源: Cast pointer to generic structure