2010-10-14 94 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