Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Эти функции обеспечивают полезные средства отладки и трассировки.
| Имя | Описание |
|---|---|
| AtlHresultFromLastError | GetLastError Возвращает код ошибки в виде HRESULT. |
| AtlHresultFromWin32 | Преобразует код ошибки Win32 в HRESULT. |
| AtlReportError | IErrorInfo Настраивается для предоставления сведений об ошибке клиенту. |
| AtlThrow | Формирует исключение CAtlException. |
| AtlThrowLastWin32 | Вызывайте эту функцию для сообщения об ошибке на основе результата функции Windows GetLastError. |
AtlHresultFromLastError
Возвращает значение кода последней ошибки в вызывающем потоке в форме HRESULT.
HRESULT AtlHresultFromLastError();
Замечания
AtlHresultFromLastError вызывается GetLastError для получения последней ошибки и возвращает ошибку после преобразования его в HRESULT с помощью макроса HRESULT_FROM_WIN32.
Требования
Заголовок: atlcomcli.h
AtlHresultFromWin32
Преобразует код ошибки Win32 в HRESULT.
AtlHresultFromWin32(DWORD error);
Параметры
error
Значение ошибки для преобразования.
Замечания
Преобразует код ошибки Win32 в HRESULT с помощью макроса HRESULT_FROM_WIN32.
Примечание.
Вместо использования HRESULT_FROM_WIN32(GetLastError())используйте функцию AtlHresultFromLastError.
Требования
Заголовок: atlcomcli.h
AtlReportError
Настраивает интерфейс для предоставления сведений об ошибке IErrorInfo клиентам объекта.
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCOLESTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCOLESTR lpszDesc,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCSTR lpszDesc,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
LPCSTR lpszDesc,
DWORD dwHelpID,
LPCSTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0);
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
UINT nID,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());
HRESULT WINAPI AtlReportError(
const CLSID& clsid,
UINT nID,
DWORD dwHelpID,
LPCOLESTR lpszHelpFile,
const IID& iid = GUID_NULL,
HRESULT hRes = 0,
HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());
Параметры
clsid
[in] CLSID объекта, сообщающего об ошибке.
lpszDesc
[in] Строка, описывающая ошибку. Версии Юникода указывают, что lpszDesc имеет тип LPCOLESTR; версия ANSI указывает тип LPCSTR.
iid
[in] IiD интерфейса, определяющего ошибку или GUID_NULL, если ошибка определена операционной системой.
hRes
[in] HRESULT, который вы хотите вернуть вызывающему объекту.
nID
[in] Идентификатор ресурса, в котором хранится строка описания ошибки. Это значение должно лежать между 0x0200 и 0xFFFF включительно. В отладочных сборках утверждение приведет к тому, что nID не индексирует допустимую строку. В сборках выпуска строка описания ошибки будет иметь значение "Неизвестная ошибка".
dwHelpID
[in] Идентификатор контекста справки для ошибки.
lpszHelpFile
[in] Путь и имя файла справки, описывающего ошибку.
hInst
[in] Дескриптор ресурса. По умолчанию этот параметр является __AtlBaseModuleModule::GetResourceInstance__AtlBaseModuleModule глобальным экземпляром CAtlBaseModule или классом, производным от него.
Возвращаемое значение
Если параметр hRes не является ненулевой, возвращает значение hRes. Если hRes равно нулю, первые четыре версии возвращаемого AtlReportError DISP_E_EXCEPTION. Последние две версии возвращают результат макроса MAKE_HRESULT( 1, FACILITY_ITF, nID ).
Замечания
Строка lpszDesc используется в качестве текстового описания ошибки. Когда клиент получает возвращаемые данные hResAtlReportError, клиент может получить доступ к IErrorInfo структуре для получения сведений об ошибке.
Пример
STDMETHODIMP CMyControl::MyErrorProneMethod()
{
BOOL bSucceeded = ErrorProneFunc();
if (bSucceeded)
return S_OK;
else
// hRes is set to DISP_E_EXCEPTION
return AtlReportError(GetObjectCLSID(), L"My error message");
}
Внимание
Не используйте AtlReportError в обработчиках перехвата C++. Некоторые переопределения этих функций используют макросы преобразования строк ATL внутри системы, которые, в свою очередь, используют _alloca функцию внутри. Использование AtlReportError обработчика перехвата C++ может вызвать исключения в обработчиках перехвата C++.
Требования
Заголовок: atlcom.h
AtlThrow
Вызовите эту функцию, чтобы сообщить об ошибке на основе кода состояния HRESULT.
__declspec(noreturn) inline void AtlThrow(HRESULT hr);
Параметры
час
Стандартное значение HRESULT.
Замечания
Эта функция используется кодом ATL и MFC в случае возникновения ошибки. Его также можно вызвать из собственного кода. Реализация этой функции по умолчанию зависит от определения символа _ATL_NO_EXCEPTIONS и типа проекта, MFC или ATL.
Во всех случаях эта функция трассирует HRESULT до отладчика.
В Visual Studio 2015 с обновлением 3 и более поздних версий эта функция относится к __declspec(noreturn), чтобы избежать спрогнозных предупреждений SAL.
Если _ATL_NO_EXCEPTIONS не определен в проекте MFC, эта функция создает исключение CMemoryException или COleException на основе значения HRESULT.
Если _ATL_NO_EXCEPTIONS не определен в проекте ATL, функция создает исключение CAtlException.
Если определена _ATL_NO_EXCEPTIONS, функция вызывает сбой утверждения вместо того, чтобы вызвать исключение.
Для проектов ATL можно предоставить собственную реализацию этой функции, которая будет использоваться ATL в случае сбоя. Для этого определите собственную функцию с той же подписью, что AtlThrow и #define AtlThrow имя функции. Это необходимо сделать перед включением atlexcept.h (это означает, что это необходимо сделать до включения заголовков ATL, так как atlbase.h включает atlexcept.h). Атрибут функции __declspec(noreturn) , чтобы избежать спрогнозных предупреждений SAL.
Пример
// Constructors and operators cannot return error codes, and
// so they are the place where exceptions are generally used.
class CMyClass
{
private:
CComPtr<IBuddy> m_spBuddy;
public:
CMyClass()
{
HRESULT hr = m_spBuddy.CoCreateInstance(CLSID_Buddy);
if (FAILED(hr))
AtlThrow(hr);
}
// methods ..
};
Требования
Заголовок: atldef.h
AtlThrowLastWin32
Вызывайте эту функцию для сообщения об ошибке на основе результата функции Windows GetLastError.
inline void AtlThrowLastWin32();
Замечания
Эта функция отслеживает результат GetLastError отладчика.
Если _ATL_NO_EXCEPTIONS не определен в проекте MFC, эта функция создает исключение CMemoryException или COleException на основе возвращаемого GetLastErrorзначения.
Если _ATL_NO_EXCEPTIONS не определен в проекте ATL, функция создает исключение CAtlException.
Если определена _ATL_NO_EXCEPTIONS, функция вызывает сбой утверждения вместо того, чтобы вызвать исключение.
Требования
Заголовок: atldef.h