Fonctions globales de signalement d’erreurs et de débogage
Ces fonctions fournissent des installations de débogage et de trace utiles.
Nom | Description |
---|---|
AtlHresultFromLastError | Retourne un GetLastError code d’erreur sous la forme d’un HRESULT. |
AtlHresultFromWin32 | Convertit un code d'erreur Win32 en valeur HRESULT. |
AtlReportError | Configure pour IErrorInfo fournir des détails d’erreur à un client. |
AtlThrow | Lève un CAtlException . |
AtlThrowLastWin32 | Appelez cette fonction pour signaler une erreur en fonction du résultat de la fonction Windows GetLastError . |
AtlHresultFromLastError
Retourne la dernière valeur du code d'erreur du thread appelant sous la forme d'une valeur HRESULT.
HRESULT AtlHresultFromLastError();
Notes
AtlHresultFromLastError
appelle GetLastError
pour obtenir la dernière erreur et retourne l’erreur après la conversion en HRESULT à l’aide de la macro HRESULT_FROM_WIN32.
Spécifications
En-tête : atlcomcli.h
AtlHresultFromWin32
Convertit un code d'erreur Win32 en valeur HRESULT.
AtlHresultFromWin32(DWORD error);
Paramètres
error
Valeur d’erreur à convertir.
Notes
Convertit un code d’erreur Win32 en HRESULT à l’aide de la macro HRESULT_FROM_WIN32.
Remarque
Au lieu d’utiliser HRESULT_FROM_WIN32(GetLastError())
, utilisez la fonction AtlHresultFromLastError.
Spécifications
En-tête : atlcomcli.h
AtlReportError
Configure l’interface IErrorInfo
pour fournir des informations d’erreur aux clients de l’objet.
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());
Paramètres
clsid
[in] CLSID de l’objet signalant l’erreur.
lpszDesc
[in] Chaîne décrivant l’erreur. Les versions Unicode spécifient que lpszDesc est de type LPCOLESTR ; la version ANSI spécifie un type de LPCSTR.
iid
[in] IID de l’interface définissant l’erreur ou GUID_NULL si l’erreur est définie par le système d’exploitation.
hRes
[in] HRESULT que vous souhaitez retourner à l’appelant.
nID
[in] Identificateur de ressource où la chaîne de description d’erreur est stockée. Cette valeur doit être comprise entre 0x0200 et 0xFFFF, de manière inclusive. Dans les builds de débogage, une assertion se produit si nID n’indexe pas de chaîne valide. Dans les builds de mise en production, la chaîne de description d’erreur est définie sur « Erreur inconnue ».
dwHelpID
[in] Identificateur de contexte d’aide pour l’erreur.
lpszHelpFile
[in] Chemin d’accès et nom du fichier d’aide décrivant l’erreur.
hInst
[in] Handle de la ressource. Par défaut, ce paramètre est __AtlBaseModuleModule::GetResourceInstance
, où __AtlBaseModuleModule
est l’instance globale de CAtlBaseModule ou une classe dérivée de celle-ci.
Valeur de retour
Si le paramètre hRes n’est pas différent de zéro, retourne la valeur de hRes. Si hRes est égal à zéro, les quatre premières versions de AtlReportError
retour DISP_E_EXCEPTION. Les deux dernières versions retournent le résultat de la macro MAKE_HRESULT( 1, FACILITY_ITF, nID
).
Notes
La chaîne lpszDesc est utilisée comme description textuelle de l’erreur. Lorsque le client reçoit le hRes à partir duquel AtlReportError
vous revenez, le client peut accéder à la IErrorInfo
structure pour plus d’informations sur l’erreur.
Exemple
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");
}
Attention
N’utilisez AtlReportError
pas les gestionnaires catch C++. Certaines substitutions de ces fonctions utilisent les macros de conversion de chaîne ATL en interne, qui utilisent à leur tour la _alloca
fonction en interne. L’utilisation AtlReportError
d’un gestionnaire catch C++ peut entraîner des exceptions dans les gestionnaires catch C++.
Spécifications
En-tête : atlcom.h
AtlThrow
Appelez cette fonction pour signaler une erreur basée sur un code d’état HRESULT.
__declspec(noreturn) inline void AtlThrow(HRESULT hr);
Paramètres
rh
Valeur HRESULT standard.
Notes
Cette fonction est utilisée par le code ATL et MFC en cas de condition d’erreur. Il peut également être appelé à partir de votre propre code. L’implémentation par défaut de cette fonction dépend de la définition du symbole _ATL_NO_EXCEPTIONS et du type de projet, MFC ou ATL.
Dans tous les cas, cette fonction trace hrESULT vers le débogueur.
Dans Visual Studio 2015 Update 3 et versions ultérieures, cette fonction est attribuée __declspec(noreturn) afin d’éviter les avertissements sal impulsants.
Si _ATL_NO_EXCEPTIONS n’est pas défini dans un projet MFC, cette fonction lève une exception CMemoryException ou COleException basée sur la valeur de HRESULT.
Si _ATL_NO_EXCEPTIONS n’est pas défini dans un projet ATL, la fonction lève une exception CAtlException.
Si _ATL_NO_EXCEPTIONS est défini, la fonction provoque un échec d’assertion au lieu de lever une exception.
Pour les projets ATL, il est possible de fournir votre propre implémentation de cette fonction à utiliser par ATL en cas de défaillance. Pour ce faire, définissez votre propre fonction avec la même signature que AtlThrow
et #define AtlThrow
être le nom de votre fonction. Cette opération doit être effectuée avant d’inclure atlexcept.h (ce qui signifie qu’elle doit être effectuée avant d’inclure tous les en-têtes ATL, car atlbase.h inclut atlexcept.h). Attribuez votre fonction __declspec(noreturn)
pour éviter les avertissements sal impétatoires.
Exemple
// 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 ..
};
Spécifications
En-tête : atldef.h
AtlThrowLastWin32
Appelez cette fonction pour signaler une erreur en fonction du résultat de la fonction Windows GetLastError
.
inline void AtlThrowLastWin32();
Notes
Cette fonction trace le résultat du GetLastError
débogueur.
Si _ATL_NO_EXCEPTIONS n’est pas défini dans un projet MFC, cette fonction lève une exception CMemoryException ou COleException en fonction de la valeur retournée par GetLastError
.
Si _ATL_NO_EXCEPTIONS n’est pas défini dans un projet ATL, la fonction lève une exception CAtlException.
Si _ATL_NO_EXCEPTIONS est défini, la fonction provoque un échec d’assertion au lieu de lever une exception.
Spécifications
En-tête : atldef.h