Поделиться QAxObject между двумя потоками?

Допустим, объект А работает в потоке. У него есть указатель на экземпляр 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 работать с совместно используемым QAxObject с объектом A?

Я чувствую, что это будет невозможно. В настоящее время у меня есть эта ошибка: QAxBase: Error calling IDispatch member NewProject: Unknown error,

И ни поток A, ни поток B не могут использовать QAxObject.

Любая информация об этом?

0

Решение

Вот объяснение: Доступ к COM-объекту из сторонних dll через потоки .

Следует использовать:

CoInitialize(0);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
0

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

Других решений пока нет …

По вопросам рекламы [email protected]