使用IDispatch *类型的参数连接QAxObject事件

时间:2016-04-05 10:07:23

标签: c++ qt com activeqt

我正在尝试使用ActiveQt库来处理具有IDispatch *类型参数的ActiveX事件,例如在idl文件中跟随。

// ...
library RecognitionClientLib
{
    importlib("stdole2.tlb");
    [
        uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX),
        helpstring("_IIFactoryEvents Interface")
    ]
    dispinterface _IIRecognizerFactoryEvents
    {
        properties:
        methods:
            [id(1), helpstring("method OnError")] void OnError(
                [in] LONG ilOperationCode,
                [in] BSTR iszDescription
                );
            [id(2), helpstring("method OnResult")] void OnResult(
                [in] IDispatch* ilpSource,
                [in] LONG ilOperationCode
                );
    };
    [
        uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX),
        control,
        helpstring("IFactory Class")
    ]
// ...

我使用了dumpcpp.exe并为该对象生成了一个头文件和一个cpp文件。 生成的文件跳过事件生成,如头文件中所示:

// skipping event interface _IIFactoryEvents

根据该文档,IDispatch *参数应转换为“QAxBase :: asVariant()”。因此,我尝试将事件连接如下:

ClientLib::IFactory* lpFactory(new ClientLib::IFactory());
bool lbOk(connect(
    lpFactory,
    SIGNAL(OnError(
        int,
        const QString&
        )),
    SLOT(onError(
            int,
            const QString&
        ))
    ));
assert(lbOk);
lbOk = connect(
    lpFactory,
    SIGNAL(OnResult(
        QVariant,
        int
        )),
    SLOT(onResult(
        QVariant,
        int
        ))
    );
assert(lbOk);

我连接OnError的信号没有问题,但是OnResult的连接失败了

  

Object :: connect:没有这样的信号   ClientLib ::器IFactory :: OnResult(QAxObject *,INT)

请帮我说明我应该使用什么参数类型作为IDispatch *类型的参数?

非常感谢!

2 个答案:

答案 0 :(得分:1)

  

请帮我说明我应该使用哪种参数类型作为参数   IDispatch *类型?

IDispatch*映射到QAxObject*http://doc.qt.io/qt-5/qaxbase.html

答案 1 :(得分:1)

我发现参数类型应该是 IDispatch * 而不进行修改,尽管文档说 QAxBase :: asVariant()用于类型的参数的IDispatch *