科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件COM编程技术基础概述之五

COM编程技术基础概述之五

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

COM组件以二进制代码的形式发布,如果不借助特定的工具组件的相关信息将难以被获取

作者:中国电波传播研究所青岛分所郎锐 来源:yesky 2007年10月20日

关键字: COM 编程技术

  • 评论
  • 分享微博
  • 分享邮件
在COM组件的使用和开发过程中经常需要获取有关组件的信息。而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取。例如,这里在使用Calendar组件时就用到了它的ProgID--MSCAL.Calendar.7。通过VC++附带的OLE/COM Object Viewer工具将可以很方便的查看指定组件的全部注册表信息和类型库信息。

  图1是OLE/COM Object Viewer工具的程序界面。在左边的树视中列举了当前操作系统下所有注册了的COM组件对象。在Automation Objects分支下列举了所有的自动化对象(包括ActiveX控件)。在选中某个对象后,右边的属性页将显示此对象的相关信息。其中主要的信息如ProgID、CLSID等均在Registry页列出。如果需要进一步获取类型库信息,可以在对象上点击右键,并在弹出菜单中选取"View Type Information…"菜单项。这将启动如图2所示的ITypeLib Viewer工具。ITypeLib Viewer的左侧树视列出了控件的对象类、接口、方法等项。相应的,在选中某个具体的项目时,右侧视图将给出详细的内容信息。


图1 OLE/COM Object Viewer


图2 ITypeLib Viewer

  除了可以使用OLE/COM Object Viewer工具得到这些信息外,也可以通过访问类型库也可以达到同样的目的。在类型库中以二进制的形式描述了一个或多个对象的类型信息。具体的类型信息包括:组件的CLSID、所支持接口的IID、接口的成员函数及其参数和返回值类型等。通过#import预编译指令和ClassWizard两种不同的方式可以从类型库获取对象的类型信息。其中在使用ClassWizard时,将可以根据类型库中的描述信息建立相应的以C++语言编写的包装类。通过此包装类将能很方便的在客户程序中使用组件对象提供的属性和方法。在组件程序中,类型库的创建是根据.odl文件中的描述进行编译的。下面给出一段.odl文件描述:

[ uuid(66ACC255-A531-4153-91E6-864FEBEAE832), version(1.0) ]
library Sample63
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
// Primary dispatch interface for CTest
[ uuid(C19A7247-C812-48D4-AC58-41BA4B412839) ]
dispinterface ITest
{
properties:
// NOTE - ClassWizard will maintain property information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_PROP(CTest)
[id(1)] VARIANT Message;
//}}AFX_ODL_PROP
methods:
// NOTE - ClassWizard will maintain method information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_METHOD(CTest)
[id(2)] VARIANT BackMessage();
//}}AFX_ODL_METHOD
};
// Class information for CTest
[ uuid(EFEA38A7-C61E-4ADD-9E8C-8D41058558AA) ]
coclass Test
{
[default] dispinterface ITest;
};
//{{AFX_APPEND_ODL}}
//}}AFX_APPEND_ODL}}
};

  这里通过coclass关键字定义了对象类型信息,ClassWizard将据此建立相应的包装类。library关键字描述了当前库信息,并可通过importlib关键字引入其他的类型库。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章