博客统计信息

51cto推荐博客
用户名:cownew
文章数:291
评论数:163
访问量:141603
无忧币:1973
博客积分:4106
博客等级:7
注册日期:2008-06-30

获取System.__ComObject的真正类型
2007-12-05 13:01:00
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
在与COM对象交互的时候有的时候我们得到一个对象,我们想知道它的类型,可以使用Object.GetType()方法得到的类型却是System.__ComObject,因为System.__ComObject是代表所有COM对象的,但是它对我们来说是没有任何意义的。如果想得到System.__ComObject的真正类型只要使用Microsoft.VisualBasic.Information.TypeName(objWindow.Object)就可以了,如果是非VB.net工程需要引用Microsoft.VisualBasic.dll 才能保证编译通过。
12月6日添加说明:
经过反编译TypeName方法,发现其核心实现为:
    UnsafeNativeMethods.ITypeInfo pTypeInfo = null;
    string pBstrName = null;
    string pBstrDocString = null;
    string pBstrHelpFile = null;
    UnsafeNativeMethods.IDispatch dispatch = VarName as UnsafeNativeMethods.IDispatch;
    if (((dispatch != null) && (dispatch.GetTypeInfo(0, 0x409, out pTypeInfo) >= 0)) && (pTypeInfo.GetDocumentation(-1, out pBstrName, out pBstrDocString, out num, out pBstrHelpFile) >= 0))
    {
        str5 = pBstrName;
    }

和猜想的一致,它确实是通过IDispatch接口来完成的(呵呵,貌似也只有这一种方式)

本文出自 “CowNew开源团队” 博客,转载请与作者联系!

0人
了这篇文章
类别:未分类┆技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2010-05-07 14:44:04
您好,我是用的是vb.net,用Microsoft.VisualBasic.Information.TypeName()不对,得到的还是__ComObject

2010-08-17 16:36:41
对头,我也有和楼上同样的问题。

 

发表评论            

2011-2012跨年度有奖征文:项目回忆录
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: