'Problems with IMetaDataImport::ResolveTypeRef Method
I have my own debugger for .NET apps that uses IMetaDataImport interface
When I call ResolveTypeRef method, I always get NotImplementedException.
The definition of ResolveTypeRef is like this:
[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
}
The method calling:
metadataImport.ResolveTypeRef(typeRefToken, ref metadataImportGuid, out metadataObject, out typeDefToken)
Typically, the method should resolve type System.Exception or System.SystemException.
The problem occured when I moved app from .NET 3.5 to .NET 4.
Thanks for the answers!
Solution 1:[1]
If you actually try and step into the method ResolveTypeRef, it seems you actually end up at SymMethod::GetSourceStartEnd which is what is returning E_NOTIMPL. Furthermore, if you have a look at the vtable in IDA, as far as I can see the method ResolveTypeRef doesn't even exist on IMetaDataImport/2's vtable; rather, it is a method on CordbModule, however evidently isn't actually exposed in the ICorDebugModule interface.
In any case, the conclusion here appears to be that Microsoft's documentation/header files are out of date with the actual implementation
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | lordmilko |
