• 8638阅读
  • 3回复

[提问]我在一个ActiveQt工程中实现了两个接口,请问用一个接口如何得到另一个接口?COM [复制链接]

上一主题 下一主题
离线零点
 

只看楼主 倒序阅读 楼主  发表于: 2015-04-07
回复本帖可获得1点威望奖励!
每人最多可获奖2次,奖池剩余3点威望 (中奖几率10%)
关键词: ActiveQtCOM
问题描述:
       我实现了两个接口类,分别为MyClass1、MyClass2。我想使用MyClass2提供的方法返回MyClass1的IUnknown对象。
代码如下:两个MyClass类的定义
MyClass.h
  1. #ifndef MYCLASS_H
  2. #define MYCLASS_H
  3. #include <QObject>
  4. #include <ActiveQt/QAxBindable>
  5. #include <Unknwn.h>
  6. class MyClass1 : public QObject, public QAxBindable
  7. {
  8.     Q_OBJECT
  9.         Q_CLASSINFO("ClassID", "{110DD90A-2B8F-4226-A7BF-4CC64393AE1D}")
  10.         Q_CLASSINFO("InterfaceID", "{1D3B6588-3D80-4143-BC68-4C506F0F2A6E}")
  11.         Q_CLASSINFO("EventsID", "{09B15BD6-6311-437C-9872-071067B8899E}")
  12. public:
  13.     MyClass1(QObject *parent = 0);
  14.     public slots:
  15.     void doSomthing();
  16. };
  17. class MyClass2 : public QObject, public QAxBindable
  18. {
  19.     Q_OBJECT
  20.         Q_CLASSINFO("ClassID", "{C6FB563E-7853-49A1-9002-4E155780A0D2}")
  21.         Q_CLASSINFO("InterfaceID", "{C3833E19-07B3-4955-91A2-F8496EE8FB02}")
  22.         Q_CLASSINFO("EventsID", "{503CB4B9-AA8B-446C-B4B4-5FA97FF2A195}")
  23. public:
  24.     MyClass2(QObject *parent = 0);
  25.     public slots:
  26. [color=#ff0000]    //返回MyClass1接口指针[/color]
  27. [color=#ff0000]    void getMyClass1(IUnknown** ipMyClass1);[/color]
  28. };
  29. #endif // MYCLASS_H
MyClass.cpp
  1. #include "myclass.h"
  2. MyClass1::MyClass1(QObject *parent)
  3.     : QObject(parent)
  4. {
  5. }
  6. void MyClass1::doSomthing()
  7. {
  8. }
  9. MyClass2::MyClass2(QObject *parent)
  10.     : QObject(parent)
  11. {
  12. }
  13. void MyClass2::getMyClass1(IUnknown** ipMyClass1)
  14. {
  15.     
  16. }
  17. #include <ActiveQt/QAxFactory>
  18. QAXFACTORY_BEGIN("{2A38CF27-008F-49D3-B486-557EBCC975F8}", "{30932635-F200-4746-855D-0AB9FA5AFF9F}")
  19. QAXCLASS(MyClass1)
  20. QAXCLASS(MyClass2)
  21. QAXFACTORY_END()
在MyClass2这个接口中我提供了一个void getMyClass1(IUnknown** ipMyClass1)的方法,但是我无法正常返回接口指针。请问我应该怎么正确实现一个COM接口?或者有没有ActiveQt开发教程推荐的,非常感谢。

离线零点

只看该作者 1楼 发表于: 2015-04-09
请高手指点一二啊
离线零点

只看该作者 2楼 发表于: 2015-04-14
帖子要沉了
离线零点

只看该作者 3楼 发表于: 2015-04-14
问题解决:
1、使用IUnknown**作为接口参数会有问题,调用接口时参数地址为空
2、函数代码实现如下
void MyClass2::getMyClass1(IDispatch** iInterface)
{
    m_obj = new QAxObject();
    bool b = m_obj->setControl("{110DD90A-2B8F-4226-A7BF-4CC64393AE1D}");//MyClass的CLSID
        //"{1D3B6588-3D80-4143-BC68-4C506F0F2A6E}"为MyClass的InterfaceID
    m_obj->queryInterface(QUuid("{1D3B6588-3D80-4143-BC68-4C506F0F2A6E}"),(void**)iInterface);
}
3、接口访问:
        IMyClass2Ptr ipMyClass2(CLSID_MyClass2);
    IDispatch* obj;
    ipMyClass2->getMyClass1(&obj);
    IMyClass1Ptr ipMyClass1 = obj;
    ipMyClass1->doSomthing();
快速回复
限100 字节
 
上一个 下一个