在我的COM组件中,我需要将所有错误转换为最合适的HRESULT
值。目前,如果我调用一些RPC接口方法(我调用MIDL生成的存根,然后调用NdrClientCall2())并且调用失败,我返回E_FAIL
,这不是很方便。
有所谓的facility in HRESULT。我可以用这个吗?
我尝试执行以下操作:
HRESULT RpcStatusToHresult( RPC_STATUS status )
{
if( status <= 0 ) {
return status;
}
return ( status & 0x0000FFFF ) | (FACILITY_RPC << 16) | 0x80000000;
}
这会将RPC_STATUS
正确翻译为有意义的HRESULT
吗?
答案 0 :(得分:3)
您的RpcStatusToHresult(状态)等同于MAKE_HRESULT(1,FACILITY_RPC,status)。 HRESULT_FROM_WIN32(status)相当于MAKE_HRESULT(1,FACILITY_WIN32,status)。
我和你一样,已经猜到了前者是正确的,但在实践中,至少就从FormatMessage()获取正确的错误信息而言,后者实际上是有效的。
答案 1 :(得分:2)
FWIW,看起来与HRESULT_FROM_WIN32
相同