如何将Win32 HRESULT转换为int返回值?

Bri*_*ian 2 c++ windows winapi

我正在用C++编写一个Windows控制台应用程序,并希望在成功时返回零,并在失败时S_OK返回有意义的错误代码(即,应该返回0,并且E_OUTOFMEMORY应该返回不同的返回值E_FAIL,依此类推).以下是一个好的方法吗?:

int wmain(int argc, wchar_t *argv[])
{
    HRESULT hr = DoSomething();
    return (int) hr;
}
Run Code Online (Sandbox Code Playgroud)

或者,还有更好的方法?也许是我忘记或找不到的标准Win32 API函数或宏?

Pau*_*ell 8

OP希望返回值为零以表示成功.有成功代码非零,所以......

if ( SUCCEEDED( hr ) )
    return 0;
return hr;
Run Code Online (Sandbox Code Playgroud)


Ste*_*ham 6

HRESULT只是一个32位整数,每个代码都是不同的值,所以你所做的就是你想要的