Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
COM-methoden melden fouten door HRESULTs te retourneren; .NET methoden rapporteren ze door uitzonderingen te genereren. De runtime verwerkt de overgang tussen de twee. Elke uitzonderingsklasse in .NET wordt toegewezen aan een HRESULT.
Door gebruikers gedefinieerde uitzonderingsklassen kunnen elke HRESULT specificeren die geschikt is. Deze uitzonderingsklassen kunnen het HRESULT dynamisch wijzigen dat moet worden geretourneerd wanneer de uitzondering wordt gegenereerd door het HResult veld in te stellen op het uitzonderingsobject. Aanvullende informatie over de uitzondering wordt aan de client verstrekt via de IErrorInfo interface, die wordt geïmplementeerd op het .NET-object in het onbeheerde proces.
Als u een klasse maakt die is afgeleid van System.Exception, moet u het HRESULT-veld tijdens de constructie instellen. Anders wijst de basisklasse de HRESULT-waarde toe. U kunt nieuwe uitzonderingsklassen toewijzen aan een bestaand HRESULT door de waarde in de constructor van de uitzondering op te geven.
Houd er rekening mee dat de runtime een HRESULT soms negeert wanneer er een IErrorInfo aanwezig is op de thread. Dit gedrag kan optreden in gevallen waarin de HRESULT en de IErrorInfo fout niet dezelfde fout vertegenwoordigen.
Een nieuwe uitzonderingsklasse maken en toewijzen aan een HRESULT
Gebruik de volgende code om een nieuwe uitzonderingsklasse met de naam
NoAccessExceptionte maken en deze te koppelen aan de HRESULTE_ACCESSDENIED.Class NoAccessException : public ApplicationException { NoAccessException () { HResult = E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
U kunt een programma (in elke programmeertaal) tegenkomen dat tegelijkertijd beheerde en onbeheerde code gebruikt. De aangepaste marshaller in het volgende codevoorbeeld gebruikt bijvoorbeeld de Marshal.ThrowExceptionForHR(int HResult) methode om een uitzondering met een specifieke HRESULT-waarde te genereren. De methode zoekt het HRESULT op en genereert het juiste uitzonderingstype. Bijvoorbeeld genereert het HRESULT in het volgende codefragment ArgumentException.
CMyClass::MethodThatThrows
{
Marshal.ThrowExceptionForHR(COR_E_ARGUMENT);
}
De volgende tabel geeft de gebruikelijke overeenkomsten weer van HRESULT naar de overeenkomende uitzonderingsklasse in .NET. HRESULT-waarden zonder expliciete toewijzingen worden toegewezen aan COMException. De volledige, actuele toewijzing vindt u in de dotnet/runtime-repository.
| HRESULT | uitzondering voor .NET |
|---|---|
COR_E_APPLICATION |
ApplicationException |
COR_E_ARGUMENT of E_INVALIDARG |
ArgumentException |
COR_E_ARGUMENTOUTOFRANGE |
ArgumentOutOfRangeException |
COR_E_ARITHMETIC or ERROR_ARITHMETIC_OVERFLOW |
ArithmeticException |
COR_E_ARRAYTYPEMISMATCH |
ArrayTypeMismatchException |
COR_E_BADIMAGEFORMAT or ERROR_BAD_FORMAT |
BadImageFormatException |
COR_E_DIRECTORYNOTFOUND or ERROR_PATH_NOT_FOUND |
DirectoryNotFoundException |
COR_E_DIVIDEBYZERO |
DivideByZeroException |
COR_E_DUPLICATEWAITOBJECT |
DuplicateWaitObjectException |
COR_E_ENDOFSTREAM |
EndOfStreamException |
COR_E_ENTRYPOINTNOTFOUND |
EntryPointNotFoundException |
COR_E_EXCEPTION |
Exception |
COR_E_EXECUTIONENGINE |
ExecutionEngineException |
COR_E_FIELDACCESS |
FieldAccessException |
COR_E_FILENOTFOUND or ERROR_FILE_NOT_FOUND |
FileNotFoundException |
COR_E_FORMAT |
FormatException |
COR_E_INDEXOUTOFRANGE |
IndexOutOfRangeException |
COR_E_INVALIDCAST or E_NOINTERFACE |
InvalidCastException |
COR_E_INVALIDFILTERCRITERIA |
InvalidFilterCriteriaException |
COR_E_INVALIDOPERATION |
InvalidOperationException |
COR_E_IO |
IOException |
COR_E_MEMBERACCESS |
AccessException |
COR_E_METHODACCESS |
MethodAccessException |
COR_E_MISSINGFIELD |
MissingFieldException |
COR_E_MISSINGMANIFESTRESOURCE |
MissingManifestResourceException |
COR_E_MISSINGMEMBER |
MissingMemberException |
COR_E_MISSINGMETHOD |
MissingMethodException |
COR_E_NOTFINITENUMBER |
NotFiniteNumberException |
E_NOTIMPL |
NotImplementedException |
COR_E_NOTSUPPORTED |
NotSupportedException |
COR_E_NULLREFERENCE orE_POINTER |
NullReferenceException |
COR_E_OUTOFMEMORY orE_OUTOFMEMORY |
OutOfMemoryException |
COR_E_OVERFLOW |
OverflowException |
COR_E_PATHTOOLONG or ERROR_FILENAME_EXCED_RANGE |
PathTooLongException |
COR_E_RANK |
RankException |
COR_E_REFLECTIONTYPELOAD |
ReflectionTypeLoadException |
COR_E_SECURITY |
SecurityException |
COR_E_SERIALIZATION |
SerializationException |
COR_E_STACKOVERFLOW orERROR_STACK_OVERFLOW |
StackOverflowException |
COR_E_SYNCHRONIZATIONLOCK |
SynchronizationLockException |
COR_E_SYSTEM |
SystemException |
COR_E_TARGET |
TargetException |
COR_E_TARGETINVOCATION |
TargetInvocationException |
COR_E_TARGETPARAMCOUNT |
TargetParameterCountException |
COR_E_THREADINTERRUPTED |
ThreadInterruptedException |
COR_E_THREADSTATE |
ThreadStateException |
COR_E_TYPELOAD |
TypeLoadException |
COR_E_TYPEINITIALIZATION |
TypeInitializationException |
COR_E_VERIFICATION |
VerificationException |
Voor het ophalen van uitgebreide foutinformatie moet de beheerde client de velden van het gegenereerde uitzonderingsobject onderzoeken. Om het uitzonderingsobject nuttige informatie te geven over een fout, moet het COM-object de IErrorInfo interface implementeren. De runtime gebruikt de informatie die door IErrorInfo wordt verschaft om het exception-object te initialiseren.
Als het COM-object geen ondersteuning biedt IErrorInfo, initialiseert de runtime een uitzonderingsobject met standaardwaarden. De volgende tabel bevat elk veld dat is gekoppeld aan een uitzonderingsobject en identificeert de bron van standaardinformatie wanneer het COM-object ondersteuning biedt IErrorInfo.
Houd er rekening mee dat de runtime een HRESULT soms negeert wanneer er een IErrorInfo aanwezig is op de thread. Dit gedrag kan optreden in gevallen waarin de HRESULT en de IErrorInfo fout niet dezelfde fout vertegenwoordigen.
| Uitzonderingsveld | Bron van informatie van COM |
|---|---|
ErrorCode |
HRESULT geretourneerd vanuit gesprek. |
HelpLink |
Als IErrorInfo->HelpContext niet nul is, wordt de tekenreeks gevormd door IErrorInfo->GetHelpFile en "#" en IErrorInfo->GetHelpContext samen te voegen. Anders wordt de tekenreeks geretourneerd vanuit IErrorInfo->GetHelpFile. |
InnerException |
Altijd een null-verwijzing (Nothingin Visual Basic). |
Message |
Tekenreeks geretourneerd van IErrorInfo->GetDescription. |
Source |
String geretourneerd door IErrorInfo->GetSource. |
StackTrace |
De stacktrace. |
TargetSite |
De naam van de methode die het mislukte HRESULT heeft geretourneerd. |
Uitzonderingsvelden, zoals Message, Sourceen StackTrace zijn niet beschikbaar voor de StackOverflowException.