2010-10-14 15 views
1

Comment puis-je utiliser windows.h dans l'application Qt? Après l'inclure je reçois plusieurs erreurs commeQt erreur tout en incluant <windows.h>

c:\Qt\4.4.3\include/QtCore/../../src/corelib/arch/qatomic_windows.h:387: error:  
declaration of C function 'long int InterlockedCompareExchange(long int*, long int,  
long int)' conflicts with  
d:\old\mingw\bin\../lib/gcc/mingw32/4.3.3/../../../../include/winbase.h:1681: error:  
previous declaration 'LONG InterlockedCompareExchange(volatile LONG*, LONG,  
LONG)' here 

Tout comprend dans l'ordre:

windows.h  
iostream  
QtCore  
QtGui  
QObject  
QString  
QFile  
QProcess  
QIODevice 

EDIT: Problème Disappear Process.start() travaille maintenant, mais je suis incapable de dire quel changement fait la différence .

EDIT2: Ce n'est pas si simple. Je vais créer une nouvelle question.

EDIT3: Le même code QProcess Process; Process.start("notepad.exe"); fonctionne dans et ne fonctionne pas dans la fonction appelée comme emplacement. Fonctionne uniquement QProcess *Process = new QProcess(); Process->start("notepad.exe");

+0

Je suis curieux, pourquoi avez-vous besoin d'inclure 'windows.h' dans une application Qt? –

+0

QProcess Process; Process.start ("notepad.exe"); lance QProcess :: UnknownError. Par conséquent, j'ai besoin d'utiliser WinExec() ou system(). – DSblizzard

Répondre

1

Cela vaut la peine de déboguer pourquoi QProcess lance un QProcess :: UnknownError - la commutation pour utiliser l'API native directement fait tout l'intérêt d'utiliser QT - son cross plate-forme après tout - un peu de une blague.

Vous faites quelque chose que devrait fonctionner, qui utilise probablement WinExec ou system() déjà et en tant que tel, votre tentative de lancer le bloc-notes échouera tout simplement à nouveau.

Peut-être que QT a juste besoin du chemin complet de notepad.exe? Il y a certainement des moments pour écrire du code de plate-forme dans QT, ce n'est pas l'un d'entre eux.

+0

"Peut-être que QT a juste besoin du chemin complet de notepad.exe?" Non, cela ne fonctionne pas. – DSblizzard

+0

Est-ce un programme QT autonome? ou est-il en cours d'exécution dans une sorte de mode restreint sur Vista/Windows 7? La seule erreur que je sais de ce que CreateProcess peut renvoyer est si le lancement nécessite l'élévation UAC. Mais notepad.exe ne devrait pas. Donc, il doit y avoir quelque chose d'autre qui ne va pas dans votre échantillon. –

+0

Im curieux - si vous avez la version de débogage de Qt, il devrait être capable de vous montrer toute la pile d'appels au moment où QProcess :: Error a été lancé. Il devrait échouer sur la base d'un code d'erreur renvoyé par CreateProcess ... –

1

Utilisez la version appropriée de MINGW pour votre version de Qt. Qt 4.3 n'est pas compatible avec mingw> = 4

+0

La version de MinGW est 3.15.2, la version de Qt est 4.4.3 – DSblizzard

+1

Mais les inclusions sont à partir de l'image 4: d: \ old \ mingw \ bin ../lib/gcc/mingw32/ 4.3.3 /../../. ./../include/winbase.h:1681: erreur: –

+0

En effet. J'ai utilisé des informations du fichier MinGW \ include \ _mingw.h qui est incorrect pour une raison quelconque. – DSblizzard