لماذا يتعطل تطبيق MFC الخاص بي عندما أقوم بإجراء استثناء؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

إذا قمت بإلقاء استثناء من داخل مربع حوار MFC، فسيتم تعليق التطبيق، حتى إذا كان لديك كتلة التقاط في التعليمات البرمجية الخاصة بك.يرفض الاستجابة للماوس أو لوحة المفاتيح، والطريقة الوحيدة لإيقاف تشغيله هي استخدام إدارة المهام.

لماذا أنا نشر هذا السؤال

من المؤسف أن هناك تطبيقًا شائعًا مغلفًا بالانكماش والذي يتوقف في كل مرة يواجه فيها خطأ استثنائيًا في مربع حوار مشروط.عندما قمنا بتحول هائل من رموز الخطأ الصحيحة إلى الاستثناءات، كنت مسؤولاً عن اختيار std::exception كفئة أساسية للاستثناءات التي تم طرحها.ولم يكشف اختبارنا عن هذه المشكلة إلا بعد بذل قدر كبير من العمل في عملية التحويل، وبحلول ذلك الوقت كان الوقت قد فات للتغيير.نأمل أن يمنع هذا السؤال/الإجابة أي شخص من ارتكاب نفس الخطأ.

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

المحلول

رمز CDialog::DoModal يجعل الحوار مشروطًا عن طريق تعطيل النافذة الأصلية.عندما يعود رمز الحوار، يتم إعادة تمكين النافذة.يوجد صيد صريح لأخطاء CException*، ولكن ليس لأي نوع آخر من الاستثناءات التي تم طرحها؛وبالتالي لا يتم إعادة تمكين النافذة الأصلية أبدًا.

قم بتغيير التعليمات البرمجية الخاصة بك لرمي مؤشر إلى أي استثناء مشتق من CException، وسوف تقوم بإصلاح المشكلة.

نصائح أخرى

إذا كنت مهتمًا بمعرفة كيفية اكتشاف Windows للتطبيقات، فقد أضفنا بعض المنشورات إلى هذا على مدونة Windows Error Reporting:

يجب ألا يكون هناك تعليق للجزء 1 من 4

يجب ألا يكون هناك أي تعليق للجزء 2 من 4

يجب ألا يكون هناك أي تعليق للجزء 3 من 4

يجب ألا يكون هناك أي تعليق للجزء 4 من 4

من المهم ملاحظة أنه عند إرسال هذه المعلومات من خلال خدمة Windows Error Reporting الخاصة بشركة Microsoft، يتم إرسالها إلى مطوري البرامج لمحاولة إصلاح هذه المشكلات.إذا كنت ترسل تقارير الأخطاء الخاصة بك، فسوف تساعد في إصلاح المشكلات التي تحدث على جهاز الكمبيوتر الخاص بك!

أنا مدير برامج في Microsoft ضمن فريق الإبلاغ عن الأخطاء في Windows.

إجابة مارك صحيحة.للحصول على تحليل أكثر صرامة لهذه المشكلة واقتراح تفصيلي للتعامل معها في التعليمات البرمجية الخاصة بك، راجع هذا الأسئلة الشائعة بقلم دوج هاريسون (القسم س6 على وجه الخصوص).

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