كيفية القيام بما يلي: قم بتعيين HRESULTs و استثناءات
وظائف COM الإعلام عن الأخطاء بواسطة إرجاع HRESULTs; وظائف.NET الإعلام بها بواسطة طرح استثناء. وقت التشغيل على معالجة الانتقال بينهما. Each استثناء فئة في the .NET Framework خرائط إلى an HRESULT.
يمكن تحديد فئات المعرفة من قبل مستخدم باستثناء أي HRESULT هو المناسبة. يمكن لهذه الفئات باستثناء HRESULT يتم إرجاعها عند تغيير ديناميكياً استثناء هو تم إنشاؤها بواسطة تعيين الحقل HResult تشغيل الكائن استثناء. الحصول تشغيل معلومات إضافى حول استثناء هو المتوفرة للعميل من خلال الواجهة IErrorInfo، الذي هو تشغيل كائن.NET في العملية غير مدار.
إذا كنت إنشاء فئة الذي يمتد من النظام. استثناء، يجب عليك تعيين الحقل HRESULT أثناء الإنشاء. وإلا, تعيين فئة الأساس القيمة HRESULT. يمكنك تعيين استثناء جديد الفئات إلى HRESULT موجودة بواسطة توفير القيمة في المنشئ للاستثناء.
لاحظ أن وقت التشغيل في بعض الأحيان يتجاهل HRESULTفي الحالات الموقع يكون هناك IErrorInfoتشغيل مؤشر ترابط. تحدث هذه المشكلة في الحالات الموقع HRESULTو IErrorInfoلا تمثل نفس خطأ.
إلى إنشاء استثناء جديد لفئة وتعيين HRESULT
استخدم تعليمات برمجية التالية لإنشاء فئة استثناء جديدة تسمى NoAccessExceptionو تعيين إلى HRESULT E_ACCESSDENIED.
Class NoAccessException : public ApplicationException { NoAccessException () { HResult = E_ACCESSDENIED; } } CMyClass::MethodThatThrows { throw new NoAccessException(); }
قد تصادف برنامجا (بأي لغة برمجة) يستخدم كل من إدارة و مدارة تعليمات برمجية في نفس الوقت. على سبيل المثال، يستخدم منظم cusإلىm في مثال التعليمة البرمجية التالية تنظيم وإرسال.رمىExceptionForHR (int HResult) الطريقة إلى قم بطرح استثناء بقيمة HRESULT معينة. البحث عن HRESULT الأسلوب ويقوم بإنشاء نوع استثناء المناسبة. على سبيل المثال، تنشئ HRESULT في جزء تعليمات برمجية التالية من ArgumentException.
CMyClass::MethodThatThrows
{
Marshal.ThrowExceptionForHR(COR_E_ARGUMENT);
}
يوفر الجدول التالي التعيين بالكامل من كل HRESULT إلى فئة استثناء مشابهة لها في إطار عمل.NET.
hresult |
استثناء.NET |
---|---|
msee_e_appdomainunloaded |
AppDomainUnloadedException |
cor_e_application |
ApplicationException |
COR_E_ARGUMENT أو E_INVALIDARG |
ArgumentException |
cor_e_argumentoutofrange |
ArgumentOutOfRangeException |
COR_E_ARITHMETIC أو ERROR_ARITHMETIC_OVERFLOW |
ArithmeticException |
cor_e_arraytypemismatch |
ArrayTypeMismatchException |
COR_E_BADIMAGEFORMAT أو ERROR_BAD_FORMAT |
BadImageFormatException |
cor_e_comemulate_error |
COMEmulateException |
cor_e_contextmarshal |
ContextMarshalException |
cor_e_core |
CoreException |
nte_fail |
CryptographicException |
COR_E_DIRECTORYNOTFOUND أو ERROR_PATH_NOT_FOUND |
DirectoryNotFoundException |
cor_e_dividebyzero |
DivideByZeroException |
cor_e_duplicatewaitobject |
DuplicateWaitObjectException |
cor_e_endofstream |
EndOfStreamException |
cor_e_typeload |
EntryPointNotFoundException |
cor_e_exception |
الاستثناء |
cor_e_executionengine |
ExecutionEngineException |
cor_e_fieldaccess |
FieldAccessException |
COR_E_FILENOTFOUND أو ERROR_FILE_NOT_FOUND |
FileNotFoundException |
cor_e_format |
FormatException |
cor_e_indexoutofrange |
IndexOutOfRangeException |
COR_E_INVALIDCAST أو E_NOINTERFACE |
InvalidCastException |
cor_e_invalidcomobject |
InvalidComObjectException |
cor_e_invalidfiltercriteria |
InvalidFilterCriteriaException |
cor_e_invalidolevarianttype |
InvalidOleVariantTypeException |
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_multicastnotsupported |
MulticastNotSupportedException |
cor_e_notfinitenumber |
NotFiniteNumberException |
E_NOTIMPL |
NotImplementedException |
cor_e_notsupported |
NotSupportedException |
orE_POINTER COR_E_NULLREFERENCE |
NullReferenceException |
COR_E_OUTOFMEMORY أو e_outofmemory |
OutOfMemoryException |
cor_e_overflow |
OverflowException |
COR_E_PATHTOOLONG أو ERROR_FILENAME_EXCED_RANGE |
PathTooLongException |
cor_e_rank |
RankException |
cor_e_reflectiontypeload |
ReflectionTypeLoadException |
cor_e_remoting |
RemotingException |
cor_e_safearraytypemismatch |
SafeArrayTypeMismatchException |
cor_e_security |
SecurityException |
cor_e_serialization |
SerializationException |
orERROR_STACK_OVERFLOW COR_E_STACKOVERFLOW |
StackOverflowException |
cor_e_synchronizationlock |
SynchronizationLockException |
cor_e_system |
SystemException |
cor_e_target |
TargetException |
cor_e_targetinvocation |
TargetInvocationException |
cor_e_targetparamcount |
TargetParameterCountException |
cor_e_threadaborted |
ThreadAbortException |
cor_e_threadinterrupted |
ThreadInterruptedException |
cor_e_threadstate |
ThreadStateException |
cor_e_threadstop |
ThreadStopException |
cor_e_typeload |
TypeLoadException |
cor_e_typeinitialization |
TypeInitializationException |
cor_e_verification |
VerificationException |
cor_e_weakreference |
WeakReferenceException |
cor_e_vtablecallsnotsupported |
VTableCallsNotSupportedException |
HRESULTs غير ذلك |
COMException |
إلى استرداد معلومات الخطأ الموسعة، يجب أن العميل التي تتم إدارتها بفحص حقول الكائن استثناء الذي تم إنشاؤه. للكائن استثناء لتوفير معلومات مفيدة حول خطأ، يجب أن يقوم الكائن COM بتطبيق الواجهة IErrorInfo. وقت التشغيل باستخدام المعلومات التي يوفرها من IErrorInfo إلى تهيئة الكائن استثناء.
إذا كان كائن COM بعدم دعم IErrorInfo ، وقت التشغيل تهيئة كائن استثناء باستخدام قيم الافتراضية. الجدول التالي بسرد كل حقل مقترنة بكائن استثناء ويعرف المصدر المعلومات الافتراضي عندما يعتمد الكائن COM من IErrorInfo.
لاحظ أن وقت التشغيل في بعض الأحيان يتجاهل HRESULTفي الحالات الموقع يكون هناك IErrorInfoتشغيل مؤشر ترابط. تحدث هذه المشكلة في الحالات الموقع HRESULTو IErrorInfoلا تمثل نفس خطأ.
حقل استثناء |
المصدر من المعلومات من COM |
---|---|
رمز الخطأ |
HRESULT التي يتم إرجاعها من يتصل. |
HelpLink |
إذا IErrorInfo-> HelpContext هو غير صفرية، السلسلة هو يتكون concatenating IErrorInfo-> GetHelpFile و "#" IErrorInfo-> GetHelpContext . Otherwهوe السلسلة هو التي يتم إرجاعها من IErrorInfo-> GetHelpFile . |
InnerException |
دائماً فارغة مرجع ( لا شيء في Visual أساسى). |
Message |
إرجاع سلسلة من IErrorInfo-> GetDescription . |
المصدر |
إرجاع سلسلة من IErrorInfo-> GetSource . |
StackTrace |
تتبع بنية تخزين العناصر. |
TargetSite |
الاسم أسلوب الذي تم إرجاعه الفشل HRESULT. |
حقول استثناء، مثل كـ الرسائل المصدرو StackTrace غير متوفرة ل من StackOverflowException.