включая заголовки Qt в DLL - PullRequest
3 голосов
/ 15 июля 2009

У меня есть библиотека DLL, в которой я хотел бы взять ссылку на объект QObject и манипулировать им, фактически не создавая интерфейс. Итак, я включил «Qt / qobject.h» и скомпилировал, но компилятор (Visual Studio 2008 pro) выдает мне синтаксические ошибки. Похоже, он не распознает объект QThread. Как мне использовать QObject в моей DLL? Это вообще возможно? Нужно ли запускать мою программу из приложения Qt? Я на самом деле пытаюсь установить общесистемный хук и заставить 3-й QWidgets приложения манипулировать ... Есть идеи, как я могу использовать QObject в моей DLL?

Вот ошибки:

1>------ Build started: Project: FroggerDLL, Configuration: Debug Win32 ------
1>Compiling...
1>FTClient.cpp
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(154) : error C2059: syntax error : 'type'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(154) : error C2238: unexpected token(s) preceding ';'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2144: syntax error : 'int' should be preceded by ')'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2144: syntax error : 'int' should be preceded by ';'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2059: syntax error : ')'
1>c:\qt-win-opensource-src-4.5.2\src\corelib\kernel\qobject.h(155) : error C2208: 'int' : no members defined using this type
1>FroggerDLL - 6 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========

Любая помощь будет принята с благодарностью,

Спасибо

Дейв

Ответы [ 3 ]

1 голос
/ 16 июля 2009

Что на линии 154? Моя просто декларация

QThread* thread() const;

но в Linux это 4.5.1, поэтому он может отличаться. Первая ссылка на что-либо, включающее токен type, находится в строке 204, которая является переменной типа Qt::ConnectionType.

КСТАТИ. Я только что попытался скомпилировать следующее в моей системе (в файле incqobj.cpp)

include <QOObject>
QObject myQOject;

с

g++ -I/usr/lib/qt4/include -I/usr/lib/qt4/include/QtCore -c incqobj.cpp

и он хорошо скомпилирован, поэтому все должно быть просто.

Редактировать: Поскольку Джесси подтверждает, что это работает для него в Windows, я испытываю соблазн сказать, что у вас есть не-Qt-макрос, который входит и вмешивается. Одна вещь, которую вы можете сделать, это проверить правильность того, что на самом деле видит компилятор, заставляя VS генерировать только предварительно обработанный исходный код, а не выполнять компиляцию.

Я не использовал VS годами, но я думаю, что вариант \ E, может быть? [Редактировать: см. Второй комментарий Джесси, должно быть / E] Это также может быть явным параметром в свойствах компилятора, который можно установить для этого исходного файла. Не могу вспомнить, куда он помещает вывод, так что вам, возможно, придется немного поискать его! Но если вы это делаете, вы можете проверить, смотрит ли код прямо на ту часть, которая соответствует строке 154 в исходном заголовке QObject.

1 голос
/ 18 июля 2009

Спасибо за помощь, решение: мне пришлось включить заголовки Qt до того, как все остальные мои включатся, и теперь он компилируется.

Еще раз спасибо!

0 голосов
/ 15 июля 2009

Попробуйте включить QThread?

#include <QThread>

Qt широко использует предварительное объявление, и иногда вам нужно включать дополнительные заголовки.

EDIT:

Вы устанавливаете какие-либо определения? Вот что у меня есть для моего коммерческого проекта Qt 2003 года (4.3.4) (исполняемый файл, который ссылается на dll Qt):

QT_LARGEFILE_SUPPORT
QT_DLL
QT_GUI_LIB
QT_CORE_LIB
QT_THREAD_SUPPORT
QT_NETWORK_LIB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...