警告 C6226: 語意不相同的整數型別之間發生隱含轉型: 將 -1 指派給 HRESULT。請考慮改用 E_FAIL。
這則警告表示正在指派 HRESULT 或是以明確的值 -1 進行初始化。此警告通常是因為整數型別和 HRESULT 型別會在無意間混淆所導致。若要表示成功,應該使用符號常數 S_OK。若要表示失敗,應該使用開頭為 E_constant 的符號常數。
範例
下列程式碼將產生出這個警告:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
若要更正這則警告,請使用下列程式碼:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
在這個警告中,SCODE 型別相當於 HRESULT。
請注意使用 malloc 和釋放 (及相關的動態配置 API) 有許多意外根據記憶體遺漏和例外狀況。若要避免這類遺漏和例外狀況的問題,請使用 C++ Standard Template Library (STL) 提供的機制。其中包括 shared_ptr、 unique_ptr和 vector。如需詳細資訊,請參閱智慧型指標 (現代 C++)與C++ 標準程式庫參考。