idlファイルに続くような、IDispatch *タイプのパラメータを持つActiveXイベントを処理するためにActiveQtライブラリを使用しようとしています。QAxObjectイベントとIDispatchタイプのパラメータを使用して接続する*
// ...
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()」に変換されなければなりません。したがって、私は、次のようにイベントを接続しようとした:私はONERRORの信号ではなくはonResultの接続を接続問題がない
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);
が
オブジェクトで失敗しました::接続しない:そのような信号 ClientLibを:: IFactory :: OnResult(QAxObject *、int)
私はIDispatch *型の引数にどのようなパラメータ型を使用する必要がありますか?
多くのありがとうございます!
Nitpick:接続するために渡すシグナル/スロットのシグネチャや空白からconst参照を削除する必要があります。これはQtがシグネチャを正規化する必要がないため、ランタイムを少し節約します。したがって、bool lbOk = connect(lpFactory、SIGNAL(OnError(int、QString))、SLOT(onError(int、QString))); –
アドバイスをいただきありがとうございます。私はそれらを変更します。 :) – crackpot