Соединение события QAxObject с параметром типа IDispatch*

Я пытаюсь использовать библиотеку ActiveQt для обработки события ActiveX, которое имеет параметр типа IDispatch*, например, следующий в файле 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 ответа

Решение

Пожалуйста, помогите мне с типом параметра, который я должен использовать для аргумента типа IDispatch*?

IDispatch* карты для QAxObject*: http://doc.qt.io/qt-5/qaxbase.html

Я обнаружил, что тип параметра должен быть IDispatch* без изменений, несмотря на то, что в документе сказано, что это было QAxBase::asVariant() для параметра типа IDispatch*.

Другие вопросы по тегам