在.NET 4.0之前的某些方案中,使用TypeLoadException检索ITypeInfo的类型失败

时间:2011-06-06 11:43:05

标签: .net com-interop

我正在研究一些不使用COM互操作程序集来探索COM对象的代码。有一次,我尝试迭代IDispatch实例的ITypeInfos(省略了参考清理/发布):

var dispatch = instance as IDispatch;
if (dispatch != null)
{
    uint count;
    dispatch.GetTypeInfoCount(out count);
    for (uint i = 0; i < count; i++)
    {
        IntPtr ptrTypeInfo;
        dispatch.GetTypeInfo(i, 0, out ptrTypeInfo);
        var itype = Marshal.GetTypeForITypeInfo(ptrTypeInfo); // fails here
    }
}

但是对于某些COM实例,对Marshal.GetTypeForITypeInfo的调用总是失败并带有TypeLoadException,例如:

  

System.TypeLoadException:无法从程序集“SOCOMApplicationLib,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“SOCOMApplicationLib.IApplication”。

我的疑问是:此错误仅发生在.NET 4.0之前。

有没有人对这种行为有解释,暗示哪里看得更彻底或者我忘记考虑的因素?

更新:我更改了策略:不是尝试将Marshal.GetTypeForITypeInfoMarshal.GetMethodInfoForComSlot一起使用,以便检索我现在使用{{TYPEATTR的可用方法的名称1}}和FUNCDESC结构。但是,我很好奇为什么我的原始方法无法可靠地工作。

0 个答案:

没有答案