Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Библиотека активных шаблонов (ATL) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Эти функции обеспечивают полезные средства отладки и трассировки.
| Имя | Описание |
|---|---|
| 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