Я пытаюсь использовать библиотеку 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 *?
Большое спасибо!
Пожалуйста, помогите мне, какой тип параметра я должен использовать для аргумента
типа IDispatch *?
IDispatch*
карты для QAxObject*
: http://doc.qt.io/qt-5/qaxbase.html
Я обнаружил, что тип параметра должен быть IDispatch * без изменений, несмотря на то, что в документе сказано, что это QAxBase :: asVariant () для параметра типа IDispatch *.