与IMetaDataImport问题:: ResolveTypeRef方法

我有我自己的.NET应用程序的调试器使用IMetaDataImport接口

当我打电话ResolveTypeRef方法,我总是NotImplementedException

的定义ResolveTypeRef是这样的:

[ComImport] [Guid("....")] //a valid GUID [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [CLSCompliant(false)] public interface IMetaDataImport { void ResolveTypeRef( [ComAliasName("mdTypeRef")] mdToken tr, [ComAliasName("REFIID")] ref Guid riid, [ComAliasName("IUnknown**"), Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIScope, [ComAliasName("mdTypeDef*"), Out] out mdToken ptd ); // ... other methods from IMetaDataImport }

该方法调用:

metadataImport.ResolveTypeRef(typeRefToken, ref metadataImportGuid, out metadataObject, out typeDefToken)

通常情况下,此方法应解决System.Exception类型或System.SystemException。

当我从.NET 3.5的移动应用.NET 4的问题发生。

感谢您的答案!

--------------解决方案-------------

UFF,我终于摆脱这种...的解决方案是不叫ResolveTypeRef,而是创建你自己的方法来解决类型:

mdToken ptkResScope;
uint len;
metadataImport.GetTypeRefProps(typeRef, out ptkResScope, null, 0, out len);
StringBuilder sb = new StringBuilder((int)len);
metadataImport.GetTypeRefProps(typeRef, out ptkResScope, sb, len, out len);
string className = sb.ToString();
foreach (loadedModule ) { // this is quite tricky part ...
metadataImportForLoadedModule = GetMetaDataImportForModule(loadedModule);
metadataImportForLoadedModule.FindTypeDefByName(className, mdToken.Nil, out typeDef);
if ( typeDef.IsNonNil(CorTokenType.mdtTypeDef) ) {
return typeDef;
}
}

这个想法来自http://blogs.msdn.com/b/davbr/archive/2011/10/17/metadata-tokens-run-time-ids-and-type-loading.aspx(真的好读书​​,如果你是感兴趣的MetaDataImport)。

分类:C# 时间:2015-03-15 人气:0
本文关键词: .NET 4.0,imetadataimport
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.686 (s). 10 q(s)