首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将指针强制转换为泛型结构

将指针强制转换为泛型结构
EN

Stack Overflow用户
提问于 2013-08-11 05:16:34
回答 1查看 394关注 0票数 0

我正在尝试转换一个指向泛型结构(blittable)的指针。当我使用非泛型结构=>时,一切似乎都很好,然后我就可以使用Marshal.PtrToStructure(...)但是该函数不接收泛型结构(为什么?)

所以我写了以下内容:

代码语言:javascript
复制
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),或者在这个函数中发现了一个错误?

EN

回答 1

Stack Overflow用户

发布于 2013-08-11 05:28:26

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18166429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档