Russian Qt Forum

Qt => ActiveX => Тема начата: Leex от Август 18, 2011, 09:01



Название: ActiveX объект не создается в консольном приложении.
Отправлено: Leex от Август 18, 2011, 09:01
Валит сегфолт при попытке создать объект.

Сгенерил с помощью dumpcpp обертку, подключил к проекту. Вот собственно код: 
Код:
#include "iidk_comlib.h" 
int main(int argc, char *argv[])
{
  IIDK_COMLib::IIDK_COM *obj=new IIDK_COMLib::IIDK_COM();
  return 0;
}
в pro файле:
Код:
QT       += core
QT       += gui

TARGET = iidk_test_console
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

HEADERS += iidk_comlib.h

SOURCES += main.cpp \
iidk_comlib.cpp

LIBS += -lQAxContainer
аналогичный код в гуишной проге работает, объект создается.
Чего может быть не так?


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Пантер от Август 18, 2011, 09:05
QCoreApplication создай, может поможет.


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Leex от Август 18, 2011, 09:12
Попробовал:
Код:
#include <QtCore/QCoreApplication>
#include "iidk_comlib.h"
int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv); 
  IIDK_COMLib::IIDK_COM *obj=new IIDK_COMLib::IIDK_COM();
  return a.exec();
}
не помогло.


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Leex от Август 18, 2011, 12:27
Помогло создание QApplication.
Правда как-то криво это все выглядит:
Класс, который содержит ActiveX объект и работает с ним, должен еще содержать "ненужный" QApplication, и все это еще должно находиться в библиотеке...

Может есть более логичные способы работы с ActiveX без создания левых объектов?


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Странник от Август 18, 2011, 12:28
необходимо провести инициализацию COM перед началом работы.
Код:
if (CoInitialize(0) == S_OK) //можно работать с COM
else //ошибочка вышла
в GUI-приложениях этого не требуется, поскольку это реализовано в конструкторе QApplication.


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Leex от Август 18, 2011, 12:41
Пробовал я CoInitialize - не катит, так же вываливается


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Странник от Август 18, 2011, 12:55
какая версия Qt, какой компилятор? у меня на Qt 4.7.3 MinGW (SDK) работает все прекрасно в консоли.
желательно минимальный пример.


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Leex от Август 18, 2011, 13:04
qt 4.7.3 mingw 4.4
минимальный пример в шапке.


Название: Re: ActiveX объект не создается в консольном приложении.
Отправлено: Nimbus от Сентябрь 04, 2011, 12:07
необходимо провести инициализацию COM перед началом работы.
Код:
if (CoInitialize(0) == S_OK) //можно работать с COM
else //ошибочка вышла
в GUI-приложениях этого не требуется, поскольку это реализовано в конструкторе QApplication.
o_O а разве COM-объекты создаются через оператор new? : )