2010-10-14 93 views
1

如何在Qt应用程序中使用windows.h?包括它后,我得到几个错误,如包括的Qt错误<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 

所有依次包括:

windows.h  
iostream  
QtCore  
QtGui  
QObject  
QString  
QFile  
QProcess  
QIODevice 

编辑:问题消失,Process.start()现在工作,但我不能说,什么样的变化带来的改变。

编辑2:并不那么简单。我会创建一个新问题。

编辑3:相同的代码QProcess Process; Process.start("notepad.exe");main()工作,并且不起作用称为插槽功能。仅适用于QProcess *Process = new QProcess(); Process->start("notepad.exe");

+0

我很好奇,为什么你需要在Qt应用程序中包含'windows.h'? – 2010-10-14 07:22:05

+0

QProcess流程;的Process.Start( “Notepad.exe的”);抛出QProcess :: UnknownError。因此我需要使用WinExec()或system()。 – DSblizzard 2010-10-14 07:52:15

回答

1

它值得调试QProcess引发QProcess :: UnknownError的原因 - 直接切换到使用本地API确实使得QT的使用成为可能 - 它的跨平台后续 - 稍微有点笑话。

你正在做一些应该工作,可能已经使用WinExec或system(),因此,您尝试启动记事本将再次失败。

也许QT只需要notepad.exe的完整路径? QT中肯定有时间编写平台代码,这不是其中之一。

+0

“也许QT只需要notepad.exe的完整路径?”不,这不起作用。 – DSblizzard 2010-10-14 10:26:39

+0

这是一个独立的QT程序吗?或者它在Vista/Windows 7上以某种限制模式运行?如果启动需要UAC提升,那么我知道该CreateProcess可能返回的唯一错误。但notepad.exe不应该。所以你的样品必须有别的系统错误。 – 2010-10-14 14:01:34

+0

我很好奇 - 如果你有Qt的调试版本,它应该能够在抛出QProcess :: Error时向你显示整个调用堆栈。它应该失败的基础上从CreateProcess返回错误代码... – 2010-10-14 14:03:55

1

为您的Qt版本使用适当版本的mingw。 Qt 4.3与mingw不兼容= = 4

+0

MinGW版本是3.15.2,Qt版本是4.4.3 – DSblizzard 2010-10-14 10:29:43

+1

但是包括来自mingw 4:d:\ old \ mingw \ bin ../ lib/gcc/mingw32/4.3.3 /../../。 ./../include/winbase.h:1681:错误: – 2010-10-14 10:58:16

+0

确实。我使用了文件MinGW \ include \ _mingw.h中的信息,因为某些原因它是错误的。 – DSblizzard 2010-10-15 09:57:10