首页| 论坛| 消息

标题:Windows下,使用dumpcpp 方式访问 COM 接口的方法
作者:sand.fj.wen
日期:2009-11-09 23:25
内容:

      本人在windows上进行开发,主要是使用 ATL 进行 COM开发,然后使用 MFC 作客户端调用COM接口。后来自己想写个辅助的开发工具,也想学习QT这个开发框架,所以就决定使用 QT 开发这个辅助的工具。但由于对 QT 不熟悉,所以不懂得如何调用 COM 接口,并且关于这方面的资料也不多。后来在 XChinux 的指导下,简单地看了下 QAxContainer模块的内容,明白了调用 COM 接口的方法还是有许多的,但我比较喜欢通过 dumpcpp 的方式生成 QT 对 COM 接口的 C++ 包装类,再调用。这里有个好处就是可以使用代码自动完成功能,而省去了通过函数原型调用还要一个一个地查看接口方法原型的工作。
      下面这些步骤主要是根据 QT 的 DUMPCPP 工具所写的,自己加以实践的成果,希望对需要这方面知识的人能够省去查找一大堆资料的麻烦。
1 使用库
    构造使用COM对象和ActiveX控件的Qt应用程序,需要向.pro文件中加入
 CONFIG += qaxcontainer
    来连接到QAxContainer模块 。
1.1. 配置QAxContainer应用程序
    QaxContainer库是静态的,因此使用这个模块的时候不需要重新分配任何额外的文件。但要注意,你所使用的提供ActiveX服务的二进制文件必须被安装在目标系统中,因此你需要把它们装在你的发布包中并在你的应用程序安装过程中为它们注册。
2. 初始化COM对象
     可以通过使用QAxBase::setControl() 或 直接把对象的名字传到QAxBase子类的构造器中来初始化一个COM对象。
     控件能通过多种格式指定,但最快且功能最强的格式是直接使用对象的Class ID(CLSID)。 Class ID能考虑到这个对象涉及别的机器时信息的变化,而且能为需要license的控件包括一个license key。
3. 访问对象API
模块提供了访问COM对象的Qt API来取代COM的数据类型。有4种方法去调用访问COM对象的API,这里只介绍第一种:
         • Generating a C++ namespace
         • Call-by-name
         • Through a script engine
    & ..


#1 [luxf1212 09-28 15:10]

#2 [echohuhu 11-27 13:17]
您好 请问我的初始化为什么一直不能成功啊
#3 [song3322745 05-13 19:31]
你好,我这里看不到你命令行的命令,能否给我重新写一份,谢谢!
#4 [【peroylin】 03-04 14:35]
受益良多可是现在调试都没问题了 运行时提示 不能初始化该怎么办?
#5 [【peroylin】 03-05 08:41]
根据上面的讲解 目前能调用生成的h cpp文件内的函数 编译通过但在运行时提示
QAxBase::qt_metacall: Object is not initialized, or initialization failed
反思下是上边介绍中的第二部“初始化”没做好 但不知道要怎么做?
求指教

回复 发表
主题 版块