ما هو أفضل مصدر للحصول على معلومات حول رموز خطأ COM؟[مغلق]

StackOverflow https://stackoverflow.com/questions/52059

  •  09-06-2019
  •  | 
  •  

سؤال

أنا في حيرة من أمري من أين يمكنني الحصول على أفضل المعلومات حول المعنى والأسباب المحتملة والحلول الممكنة لحل أخطاء COM عندما يكون كل ما لديك هو HRESULT.

إن البحث عن Google عن مصطلحات مثل "80004027" لا جدوى منه لأنه يرسل لك إلى مجموعات مناقشة عشوائية حيث 90 ٪ من الوقت ، السؤال "ماذا يعني 80004027؟" لم يتم الرد عليها.

ما هو المصدر الجيد لهذا؟لماذا لا تعد MSDN هي أهم نتائج Google؟

هل كانت مفيدة؟

المحلول

أستخدم دائمًا WinError.h.يحتوي هذا على الغالبية العظمى من رموز أخطاء Windows بجميع أنواعها.

المؤشر الرئيسي الذي يجب البحث عنه هو جزء المنشأة من الكود:البايت الثاني الأكثر أهمية.أي 0x80nnmmmm، حيث nn هو المرفق.يخبرك ذلك بالمكون الذي أنشأ الكود.أي شيء به خاصية 7 هو رمز خطأ Windows تمت إعادة تجميعه كـ HRESULT، ويجب عليك تحويل الكلمة المنخفضة إلى رقم عشري والبحث عنها في WinError.h.هناك أيضًا نطاقات أخطاء تظهر في رؤوسها الخاصة (على سبيل المثال.أي شيء من 12000 إلى 12999 هو رمز خطأ WinInet ويجب عليك البحث عنه في WinInet.h).

سيعطيك البحث عن رمز الخطأ اسمًا رمزيًا، والذي قد يكون موجودًا في وثائق أكثر من الرمز نفسه أو صياغة رسالة الخطأ.

يشير FACILITY_ITF (الذي له القيمة 4، لذلك تبدأ HRESULTs هذه بـ 0x8004) إلى أن الخطأ تم تعريفه بواسطة الواجهة التي تستخدمها؛سيتعين عليك التحقق من تلك الواجهة لمعرفة ما يعنيه ذلك.

وأخيرًا، يوفر COM أيضًا واجهة IErrorInfo لاسترداد معلومات الخطأ الموسعة:استدعاء GetErrorInfo لاسترداد كائن الخطأ.سيتعين عليك الاستعلام عن ISupportErrorInfo واستدعاء أسلوب InterfaceSupportsErrorInfo الخاص بهذه الواجهة لتحديد ما إذا كانت الواجهة التي اتصلت بها قد قامت بالفعل بتعيين كائن الخطأ (وبالطبع، إذا كان رمز القالب، فقد يكون كاذبًا).

نصائح أخرى

سيعطيك البحث عن الأخطاء (ErrLook.exe) في مجلد %PROGRAMFILES%[بعض إصدارات Visual Studio] ools Common7\ رسالة الخطأ كثيرًا، ولكن ليس دائمًا:

    |---------------------------------------------------|
    | [] Error Lookup                                   |
    |---------------------------------------------------|
    |   Value: [0x80004027]                             |
    |                                                   |
    |   Error Message                                   |
    |   +---------------------------------------------+ |
    |   |The component or application containing the  | |
    |   |component has been disabled                  | |
    |   |                                             | |
    |   +---------------------------------------------+ |
    |   [Modules...]    [Look up]    [Close]    [Help]  |
    |----------------------------------------------------

إذا لم ينجح ذلك، يمكنك اتباع بعض الأفكار من هنا:http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(بحث الخطأ ببساطة يستدعي formatmessage () مع علامة format_message_from_system)

إذا لم يكن خطأ COM خطأً في النظام، فقد يتعين عليك أيضًا التحقق من وثائق المكون الذي تسبب في الخطأ.

إذا اكتشفت الخطأ في التعليمات البرمجية، فيمكنك أن تأمل أن ينفذ المكون الأخطاء الغنية (GetErrorInfo()، مثل كائن Err في VB) حتى تتمكن من الحصول على رسالة كاملة تصف المشكلة.

رابط جيد من Prakash (لم أكن على علم بأشياء RCNr - اعتقدت أن تلك البايتات كانت جزءًا من المنشأة - ولكن هذا صحيح فقط في Windows 16 بت على ما يبدو.)

غالبًا ما تكون هذه الرموز غير المعروفة خاصة بالواجهة/المكون الذي تستخدمه.سيتم تعيين المنشأة على FACILITY_ITF.لدي برنامج قديم HRPlus (وصلة؟) الذي يوزع HRESULTs.

هيكل رمز خطأ COM

الثاني في نتائج جوجل لرمز خطأ COM.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top