2009-07-15 129 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行的部分。