Сервер ActiveQt вне процесса: сигналы не работают

Я должен использовать ActiveQt (QT 4.8.6 Windows7). У меня проблема с сервером вне процесса (.exe). Он успешно зарегистрирован, он отвечает на сигналы контейнера своими слотами, но я не могу заставить сервер испускать сигналы (или заставить контейнер принимать их).

Про файл:

TARGET = object_mkpa
TEMPLATE = app
CONFIG += qt warn_off qaxserver
RC_FILE  = qaxserver.rc
DEF_FILE = qaxserver.def
SOURCES += src/object_mkpa.cpp \
src/main.cpp
HEADERS += src/object_mkpa.h

заголовок:

#include <QObject>
#include <QAxBindable>

class Object_mkpa : public QObject, public QAxBindable
{
Q_OBJECT

Q_CLASSINFO("RegisterObject", "yes")

public:
Object_mkpa(QObject* parent = 0 );

public slots:
...
signals:
...
};

источник:

#include "object_mkpa.h"#include <QAxFactory>

Object_mkpa::Object_mkpa(QObject* parent) : QObject(parent) {  }

QAXFACTORY_DEFAULT(Object_mkpa,                              //widget class
"{69dfccf5-697f-497f-8aa9-d1ecfb64c1bf}", //class ID
"{e276cc69-3bf8-4932-b341-bdcb1045901b}", //interface ID
"{60b215f0-7f16-4f79-bac8-6b8d3cb14a00}", //event interface
"{110d3945-cfe7-4ae7-872c-02757e8dde91}", //type library ID
"{88dec6e0-4a5a-4c0b-bcdd-3f18dea9d86d}") //app ID
...

и главное, что на самом деле не является существенным (оно даже выполняется? ..)

#include "object_mkpa.h"#include <QApplication>

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
return app.exec();
}

Я протестировал внутрипроцессный сервер (dll) и там работают сигналы, но у него есть другая проблема — он создает экземпляр COM-объекта для каждого контейнера, который использует dll. Я думаю, что так и должно быть (что противоположно тому, что мне нужно), но если вы знаете какой-нибудь взлом — пожалуйста, скажите мне.

разница с внешними процессами заключается в отсутствии main.cpp и немного измененного файла .pro

TARGET = object_mkpa_dll
TEMPLATE = lib
CONFIG += qt warn_off dll qaxserver
RC_FILE  = qaxserver.rc
DEF_FILE = qaxserver.def
LIBS += -lQAxServerd
HEADERS += \
object_mkpa_dll.h
SOURCES += \
object_mkpa_dll.cpp

После сборки с использованием собственных шагов сборки qt creator я использую dumpcpp на .exe или .dll и копирую сгенерированные файлы в каталог клиента.

важная часть файла .pro:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = app
CONFIG += qaxcontainer

Наконец, вот как я его использую:

object_mkpaLib::Object_mkpa interface; //this is in class declaration

QObject::connect(&interface, SIGNAL(test(int)), SLOT(testTester(int)));
QObject::connect(this, SIGNAL(test(QString)), &interface, SLOT(test2(QString)));

1

Решение

Задача ещё не решена.

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


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