2012-01-14 19 views
3

的問題,我有我自己的.NET應用程序的調試器使用IMetaDataImport interface與IMetaDataImport :: ResolveTypeRef方法

當我打電話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

感謝您的答案!

+0

我不知道「ref」關鍵字應該用於「riid」參數。但它沒有或沒有它。 – Paulie 2012-01-14 20:50:16

回答

2

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感興趣)。

+0

好笑,我想標記爲答案,但我將在22小時內:) – Paulie 2012-01-15 22:06:04

+0

該死的,並在[MSDN](https://msdn.microsoft.com/en-us/library/ms230990(v = vs.110).aspx)沒有關於這個**沒有實現異常**!謝謝! – 3615 2016-07-29 12:21:58