Как перевести RPC_STATUS в HRESULT? - PullRequest
3 голосов
/ 29 июня 2010

В моем компоненте COM мне нужно перевести все ошибки в наиболее подходящие значения HRESULT. В настоящее время, если я вызываю некоторый метод интерфейса RPC (я вызываю сгенерированную MIDL заглушку, которая, в свою очередь, вызывает NdrClientCall2 () ), и вызов не удается, я возвращаю E_FAIL, что не очень удобно.

Есть так называемое средство в HRESULT . Могу ли я использовать это?

Я пытался сделать следующее:

HRESULT RpcStatusToHresult( RPC_STATUS status )
{
     if( status <= 0 ) {
         return status;
     }
     return ( status & 0x0000FFFF ) | (FACILITY_RPC << 16) | 0x80000000;
}

Будет ли это правильно переводить RPC_STATUS в значимые HRESULT s?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Ваш RpcStatusToHresult (статус) эквивалентен MAKE_HRESULT (1, FACILITY_RPC, статус). HRESULT_FROM_WIN32 (статус) эквивалентен MAKE_HRESULT (1, FACILITY_WIN32, статус).

Я, как и вы, догадывался, что первое будет правильным, но на практике, по крайней мере в том, что касается получения правильного сообщения об ошибке от FormatMessage (), последнее - то, что на самом деле работает.

2 голосов
/ 02 марта 2011

FWIW, это выглядит так же, как HRESULT_FROM_WIN32

...