0

スレッドで実行されているオブジェクト A を考えてみましょう。これは、QAxObject インスタンスとオブジェクト B へのポインターを持ちます。オブジェクト B は、QAxObject へのポインターを持ちます。

オブジェクト A がスレッドを作成し、オブジェクト B をスレッド内に移動します。

#ifndef OBJECTA_H
#define OBJECTA_H

#include <QtCore/QObject>
#include <QtCore/QThread>
#include <QAxObject>

#include "ObjectB.h"

class ObjectA : public QObject
{
    Q_OBJECT
public:
    ObjectA(QObject *parent = 0) : QObject(parent)
    {
        thread = new QThread();
        activeX = new QAxObject();
        objectB = new ObjectB(activeX);
        objectB->moveToThread(thread);

        ObjectA::connect(objectB, SIGNAL(someSignal()), this, SLOT(someSlot()));

        thread->start();
    }

protected slots:
    void someSlot();

private:
    QThread *thread;
    QAxObject *activeX;
    ObjectB *objectB;
};

#endif // OBJECTA_H


#ifndef OBJECTB_H
#define OBJECTB_H

#include <QtCore/QObject>
#include <QAxObject>

class ObjectB : public QObject
{
    Q_OBJECT
public:
    ObjectB(QAxObject *axObject, QObject *parent = 0) : QObject(parent)
    {
        activeX = axObject;
    }

signals:
    void someSignal();

private:
    QAxObject *activeX;
};

#endif // OBJECTB_H

オブジェクト B は、オブジェクト A と共有されている QAxObject を操作できますか?

私はそれが不可能になると感じています。現在、次のエラーが発生しています: QAxBase: Error calling IDispatch member NewProject: Unknown error

また、スレッド A もスレッド B も QAxObject を使用できません。

これに関する情報はありますか?

4

1 に答える 1

0

説明は次のとおりです。スレッド間でサードパーティの dll から COM オブジェクトにアクセスします

使用する必要があります:

CoInitialize(0);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
于 2013-04-10T14:54:25.687 に答える