Соединение события 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 *?

Большое спасибо!

1

Решение

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

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

1

Другие решения

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

1