1

IDispatch* 型のパラメータを持つ ActiveX イベントを処理するために ActiveQt ライブラリを使用しようとしています。

// ...
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* 型の引数にどのパラメーター型を使用すればよいか教えてください。

どうもありがとう!

4

2 に答える 2

2

タイプIDispatch*のパラメーターのQAxBase::asVariant()であるとドキュメントに記載されていたにもかかわらず、パラメーターのタイプは変更なしでIDispatch*である必要があることがわかりました。

于 2016-04-06T09:49:47.230 に答える
1

IDispatch* 型の引数にどのパラメーター型を使用すればよいか教えてください。

IDispatch*マップ先QAxObject*: http://doc.qt.io/qt-5/qaxbase.html

于 2016-04-05T14:30:30.113 に答える