كيفية القيام بما يلي: قم بتعيين 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.

راجع أيضًا:

موارد أخرى

إمكانية التشغيل التفاعلي COM متقدم

معالجة ثم طرح استثناءات