Доброго времени суток, Господа.
Разбираюсь с ActiveQt - пытаюсь написать сервер и клиент. С клиентом все замечательно - прикрутил к себе media player и поуправлял им. С сервером сложнее: я начал с out-of-process сервера (т.е. сервер в виде отдельного приложения) который только и делает, что выводит на экран сообщение в мессаджбоксе. Вроде заработало, но есть проблема: клиент не может найти COM компонент пока он явно не будет запущен мной из командной строки с параметром -activex, т.е. например: MySrv.exe -activex
Вот код клиента, который создает мой компонент. Если сервер не запущен, то выстреливает "No such control"
Код | #include "dialog.h" #include "ui_dialog.h" #include "QMessageBox" #include "QVariant" #include "QFile" #include "QTextStream" #include <QAxWidget>
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); w = new QAxWidget (this); w->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); if ( ! w->setControl("{A19A8A38-EE1E-4f6d-8AD2-34B2624AC25F}") ) { QMessageBox msg; msg.setText("No such control"); msg.exec(); } }
|
А это сервер: .h
Код | #ifndef WIDGET_H #define WIDGET_H
#include <QtGui/QWidget>
namespace Ui { class Widget; }
class Widget : public QWidget { Q_OBJECT Q_CLASSINFO("ClassID", "{A19A8A38-EE1E-4f6d-8AD2-34B2624AC25F}") Q_CLASSINFO("InterfaceID", "{A4BBD574-CA05-483a-8D53-7D011A4EAB35}") public: Widget(QWidget *parent = 0); ~Widget();
private: Ui::Widget *ui; };
|
.cpp
Код | #include "widget.h" #include "ui_widget.h" #include <QMessageBox> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QMessageBox msg; msg.setText("ActiveX is created! And this is version 2.0!"); msg.exec(); }
Widget::~Widget() { delete ui; }
|
main.cpp
Код | #include <QtGui/QApplication> #include <QAxFactory> #include "widget.h"
QAXFACTORY_BEGIN("{32370728-0AAA-43d5-AD0A-4DA10F9416CE}", "{4E47D5E6-AAAE-4d5a-952D-A6A63664F02F}") QAXCLASS(Widget) QAXFACTORY_END()
int main(int argc, char *argv[]) { QApplication a(argc, argv); if (!QAxFactory::isServer()) { Widget w; w.show(); } return a.exec(); }
|
.pro
Код | TARGET = NewSrv TEMPLATE = app
CONFIG += qaxserver RC_FILE = qaxserver.rc
SOURCES += main.cpp\ widget.cpp
HEADERS += widget.h
FORMS += widget.ui
|
Я использую Qt Creator, ОС: WinXP
Вопрос - так и должно быть, или есть способ сделать так, чтобы сервер запускался сам, когда этого затребует клиент?
Заранее благодарен за Ваши ответы!
|