2009-07-15 6 views
3

J'ai une DLL dans laquelle je voudrais prendre une référence à un QObject et le manipuler, sans réellement créer une interface. Donc, j'ai inclus "Qt/qobject.h" et compilé, mais le compilateur (Visual Studio 2008 pro) me donne des erreurs de syntaxe. Il semble qu'il ne reconnaisse pas l'objet QThread. Comment utiliser un QObject dans ma DLL? Est-ce seulement possible? Dois-je commencer mon programme à partir d'une application Qt? Je suis en train d'essayer de définir un crochet à l'échelle du système et d'obtenir la 3ème application QWidgets à manipuler ... Toute idée comment je peux utiliser QObject dans ma DLL?y compris les en-têtes Qt dans la DLL

Voici les erreurs:

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

Toute aide serait grandement appréciée,

Merci

Dave

+0

Je viens de faire la même chose que Troubadour mais dans VS2010 et ça a aussi bien fonctionné. Quelque chose de louche se passe ... –

Répondre

1

Merci pour toute l'aide, la solution: J'ai dû inclure les en-têtes Qt avant que tous mes autres comprennent, et il compile maintenant.

Merci encore!

+0

Ah, donc * était * une macro non-Qt interférant. Bon à savoir, il est trié, mais si vous ne savez jamais quel en-tête est l'offensant, je serais intéressé de savoir. – Troubadour

+0

C'est l'en-tête Stdafx.h qui interfère avec Qt –

0

Essayez d'inclure QThread? Qt utilise la déclaration directe de manière extensive et parfois vous devez inclure des en-têtes supplémentaires.

EDIT:

Définissez-vous des définitions? Voici ce que j'ai pour mon projet commercial Qt 2003 (4.3.4) (exécutable qui relie à dll Qt):

QT_LARGEFILE_SUPPORT 
QT_DLL 
QT_GUI_LIB 
QT_CORE_LIB 
QT_THREAD_SUPPORT 
QT_NETWORK_LIB 
+0

J'ai essayé ceci, les mêmes erreurs apparaissent ... –

+0

Je ne définis aucune définition. Je ne fais que commencer le projet, et la seule ligne de "code Qt" est mon #include "Qt/qobject.h", et maintenant #include "Qt/qthread.h". Je ne sais vraiment pas ce qui se passe, et pourquoi je n'arrive pas à utiliser les en-têtes Qt comme ça. –

+0

Et merci pour les réponses rapides, très appréciées! –

1

Quelle est la ligne 154? Le mien est juste la déclaration

QThread* thread() const; 

mais c'est 4.5.1 sur Linux donc ça pourrait être différent. La première référence à tout ce qui concerne le jeton type est la ligne 204 qui est une variable de type Qt::ConnectionType.

BTW. Je viens d'essayer de compiler ce qui suit sur mon système (dans le fichier incqobj.cpp)

include <QOObject> 
QObject myQOject; 

avec

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

et complié bien, il devrait être aussi simple que cela. Edit: Depuis que Jesse confirme que cela fonctionne pour lui sur Windows, je suis tenté de dire que vous avez une macro non-Qt qui arrive et interfère. Une chose que vous pourriez faire est de vérifier ce que le compilateur voit réellement en obtenant que VS ne produise que la source prétraite plutôt que de faire la compilation.

Je n'ai pas utilisé VS depuis des années mais je pense que l'option est peut-être \ E peut-être? [Edit: voir le 2ème commentaire par Jesse, il devrait être/E] Il peut également être une option explicite maintenant dans les propriétés du compilateur qui peuvent être définies pour ce fichier source. Je ne me souviens pas où il met la sortie, donc vous devrez peut-être chercher un peu! Si vous obtenez cela, vous pouvez vérifier pour voir si le code ressemble directement à la partie qui correspondrait à la ligne 154 dans l'en-tête QObject d'origine.

+0

C'est à quoi ça ressemble sous Windows dans la version 4.5.0. Une erreur bizarre et QThread est forwarded déclaré donc s'il crée juste l'objet il ne devrait y avoir aucun problème. –

+0

Bon appel sur la sortie du préprocesseur./E est correct: http://msdn.microsoft.com/en-us/library/3xkfswhy.aspx –

Questions connexes