我正在尝试转换一个指向泛型结构(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),或者在这个函数中发现了一个错误?
发布于 2013-08-11 05:28:26
我不确定这是否适用于泛型指针,但在.net中有一种方法可以在类型之间进行低级转换。它涉及到FieldOffset为0的StructLayout属性和多个字段。
http://netpl.blogspot.com/2010/10/is-net-type-safe.html
https://stackoverflow.com/questions/18166429
复制相似问题