Microsoft ATL эквивалентен функции Borland OleCheck - PullRequest
2 голосов
/ 10 сентября 2010

Borland C ++ Builder предоставляет функцию OleCheck(HRESULT Result);.Его описание в документации таково:

OleCheck используется для обертывания многих COM-подпрограмм, так что в случае сбоя этой подпрограммы пользователи будут иметь возможность обрабатывать ее в возникающем исключении.

Если значение ECode меньше нуля, OleCheck вызывает исключение EOleSysError, которое указывает код ошибки.

Какую функцию или идиому рекомендуется использовать с Microsoft ATL для выдачи исключения, если функция возвращает ошибочное значение состояния?Я хотел бы избежать смешивания библиотек Borland и Microsoft в таком коде:

CComPtr<Outlook::Explorers> spExplorers;
OleCheck(m_spApp->get_Explorers(&spExplorers));

1 Ответ

2 голосов
/ 10 сентября 2010

Нет такой готовой вещи в ATL. Наиболее близким является AtlThrow(), который выдает исключение (безусловно), но проверка все еще остается за вами - вы можете посмотреть, как AtlThrow() используется в самом ATL.

Так что, IMO, вам лучше всего создать свою собственную функцию - она ​​примет HRESULT и вызовет AtlThrow() или какую-либо другую конструкцию, создающую исключение, в течение HRESULT с, которая будет преобразована в макрос false через FAILED.

...