2012-06-05 242 views
1

我正在使用Shell命令啓動進程。我的開發環境是C++/QT Creator/QT庫和Windows API。如何在QT Creator中檢查ShellExecute命令返回(HINSTANCE)代碼

我該如何處理HINSTANCE返回值?如果(的hInstance < 32)代碼拋出一個編譯錯誤

437: error: ISO C++ forbids comparison between pointer and integer 


    HINSTANCE hInstance = ShellExecute(0, QString("open").toStdWString().c_str(), Path.toStdWString().c_str(), 0, 0, SW_SHOWNORMAL); 
    if (hInstance < 32) 
     qDebug() << "Error"; 
+0

ShellExecute()是一個殘缺不全的16位Windows版本3。你必須施放,但首先考慮ShellExecuteEx()。 –

+0

嘗試用QProcess執行它 – ScarCode

+0

或者嘗試CreateProcess()。此外,你爲什麼需要HINSTANCE? – Forgottn

回答

0

可以使用的reinterpret_cast投返回值:

int retValue = reinterpret_cast<int>(ShellExecute(0, QString("open").toStdWString().c_str(), Path.toStdWString().c_str(), 0, 0, SW_SHOWNORMAL)); 
    if (retValue < 32) 
     qDebug() << "Error"; 

,同時它也可能導致一個警告:

警告C4302:'reinterpret_cast':從'HINSTANCE'截斷爲'int'

但至少它工作。 在MSDN中,它也建議轉換爲int。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

「如果函數成功,則返回大於32更大的值。如果函數調用失敗,它返回一個錯誤值,指示失敗的原因。爲了向後兼容16位Windows應用程序,將返回值強制轉換爲HINSTANCE。然而,這不是真正的HINSTANCE。它只能轉換爲int,並與下面的32或下面的錯誤代碼進行比較。