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 제공 : 추가 정보 : 작업 런타임을 destabilize 수 있습니다.
내가 뭘 잘못하고 있니? 누구나이 문제에 대한 더 나은 접근법 (일반 구조에 대한 ptr)을 알고 있거나이 함수에서 오류를 발견 했습니까?
0이 감사의 FieldOffset에서 StructLayout 특성 및 여러 필드를 포함한다. 나는 그걸 기억하지 못했다. 하지만 불행히도 사실 일 수 있습니다 : genericApplicationType, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null '어셈블리에서'PointerToStructure'1 '타입을로드 할 수 없습니다. 왜냐하면 일반 타입은 명시 적 레이아웃을 가질 수 없기 때문입니다. – dajuric
당신은 제네릭을 잊어 버릴 수 있으며 그것을 객체로 전달하고 호출자에게 다시 캐스트 할 수 있습니다. –
나는 인터페이스를 시도하고 그것은 나에게 오류를 준다. (주소는 중복 될 수 없다 ...). 개체에 특정 크기가 없기 때문에 개체를 사용할 수 없습니다 (FieldOffset (0)을 의미하는 경우). – dajuric