2009-07-15 125 views
3

我有一个DLL中,我想引用一个QObject并对其进行操作,而无需真正创建一个接口。所以,我包含了“Qt/qobject.h”并进行了编译,但编译器(Visual Studio 2008 pro)给了我语法错误。它看起来不能识别QThread对象。我如何在我的dll中使用QObject?这甚至有可能吗?我是否必须从Qt应用程序启动我的程序?我实际上试图设置一个系统范围的钩子并获得第三个应用程序QWidgets来操纵......任何想法如何在我的dll中使用QObject?包括DLL中的Qt头文件

下面是错误:

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 ========== 

任何帮助将不胜感激,

感谢

戴夫

+0

我只是做了同样的事情Troubadour但在VS2010中,它也工作得很好。东西腥味正在... – 2009-07-15 21:50:02

回答

1

感谢您提供的所有帮助,解决方案:我必须在所有其他包含之前包含Qt头文件,并且现在编译它。

再次感谢!

0

尝试包括QThread的?

#include <QThread> 

Qt广泛使用前向声明,有时需要包含额外的头文件。

编辑:

你设置的任何定义?以下是我为我的Qt 2003商业(4.3.4)项目(可执行程序链接到Qt的dll文件):

QT_LARGEFILE_SUPPORT 
QT_DLL 
QT_GUI_LIB 
QT_CORE_LIB 
QT_THREAD_SUPPORT 
QT_NETWORK_LIB 
+0

我试过了,出现同样的错误... – 2009-07-15 19:49:11

+0

我没有设置任何定义。我刚开始这个项目,“Qt代码”的唯一一行是我的#include“Qt/qobject.h”,现在是#include“Qt/qthread.h”。我真的不知道发生了什么,为什么我似乎无法使用像这样的Qt头文件。 – 2009-07-15 20:04:21

+0

感谢您的快速回复,非常感谢! – 2009-07-15 20:05:10

1

什么是上线154?我只是声明

QThread* thread() const; 

但这是4.5.1在Linux上,所以它可能会有所不同。对涉及标记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也许? [编辑:参见Jesse的第二条评论,它应该是/ E]它现在也可以是可以为该源文件设置的编译器属性的明确选项。不记得它把输出放在哪里,所以你可能需要寻找它的一些!如果你这样做了,尽管你可以检查代码是否正确对应于原始QObject头部中第154行的部分。