نمایش نتایج 1 تا 2 از 2

نام تاپیک: بروز Exception در داخل پروژه MFC Library در حالت x64

  1. #1

    Question بروز Exception در داخل پروژه MFC Library در حالت x64

    سلام
    یک کد ++C دارم که مربوط به پیاده سازی یک الگوریتم هستش ...

    یکسری از نقاط برنامه خطاهایی مثل Divide by zero و Index out of band داره و ممکنه باعث تولید Exception بشه ...

    تا وقتی که این کد بصورت یه برنامه Console در VS اجرا میشه مشکلی نیست و از روی خطاها عبور می کنه و الگوریتم رو هرچند غلط به پایان می رسونه. این ممکنه به خاطر غیرفعال بودن Exception ها باشه!

    وقتی همین کد برای استفاده در زبانهای دیگر با استفاده از یک پروژه MFC Library به یک dll.* تبدیل میشه؛ باز مشکلی نیست و حداقل تو Delphi و Java الگوریتم بدون خطا اجرا می شه ...

    اما تو نسخه 64 بیتی dll.* موضوع فرق می کنه و همون نقطه های Exception باعث بروز خطا و ناتمام ماندن برنامه میشه!!!
    جالبه که در حالت اجرای کنسولی (بدون dll.*) در حالت 64 بیتی Exception تولید نمیشه!

    فکر کنم باید یه جوری Exception Mask در داخل dll.* انجام بشه، چون در حالت Console ای فعال/غیر فعال کردن Exception ها داخل Visual Studio انجام میشه، اما تو حالت فراخوانی تو محیطهای دیگه، خبری از VS نیست.

    مشابه این قضیه رو یک باره دیگه تو ساخت dll.* تو Delphi دیده بودم که مشکل با فراخوانی تابع SetExcepionMask و Mask کردن چند تا Exception برطرف شده بود. البته تو اون قضیه نسخه 64 بیتی بدون مشکل اجرا می شد اما نسخه so.* تهیه شده برای استفاده در لینوکس، Exception هایی ایجاد می کرد که با Mask کردن اونها در سمت so.* مشکل برطرف شد.

    ضمنا ممکنه بگید که خوب خطاهایی که باعث Exception میشه رو اصلاح کنم! اما حجم کد خیلی زیاده و نیاز به بررسی زیادی داره و در واقع فعلا می خوام نسخه 64 بیتی مثل نسخه 32 بیتی حداقل بدون خطا اجرا بشه.

    با تشکر

  2. #2

    نقل قول: بروز Exception در داخل پروژه MFC Library در حالت x64

    یکسری از نقاط برنامه خطاهایی مثل Divide by zero و Index out of band داره و ممکنه باعث تولید Exception بشه ...
    نکته اول
    خطای Divide by zero از نوع خطاهای زمان کامپایل هست، تقریبا همه کامپایلرهای معتبر در زمان کامپایل این خطا را میگیرند، در زمان اجرا هم اگر یکی از مقادیر عملیات تقسیم 0 شده باشه بازهم یک
    Unhand-led exception ساطع میشه حتی اگر درون یک بلاک try-catch عملیات تقسیم انجام شده باشه که این خطا هم مستقیما به کد اسمبلی تولید شده مربوط هست یعنی دستور IDIV OR DIV البته به غیر از دستورات سری SSE نمی توان یکی از عملوندهای دستورات فوق را صفر قرار داد به همین علت خطای تقسیم بر صفر عملا غیر قابل دور زدن می باشد
    نکته دوم
    خطای index out of bound هم که از اون دسته خطاهای امنیتی هست که در زمان کامپایل فقط یک هشدار ساطع میشود البته نه در همه کامپایلرها ولی در زمان اجرا هم بسته به شرایط overlap شدن آفست ها میتواند باعث کرش برنامه شود ولی در خیلی از مواقع هم برنامه کرش نخواهد کرد ولی قطعا رفتار تعریف نشده برای برنامه رخ خواهد داد.

    تا وقتی که این کد بصورت یه برنامه Console در VS اجرا میشه مشکلی نیست و از روی خطاها عبور می کنه و الگوریتم رو هرچند غلط به پایان می رسونه. این ممکنه به خاطر غیرفعال بودن Exception ها باشه!
    از چه نسخه ای از کامپایلر و ویژوال استودیو استفاده میکنید؟
    چون در صورت رخداد خطای تقسیم بر 0 در هر نوع باینری فایلی چه DLL , چه EXE برنامه کرش خواهد کرد.

    ضمنا ممکنه بگید که خوب خطاهایی که باعث Exception میشه رو اصلاح کنم! اما حجم کد خیلی زیاده و نیاز به بررسی زیادی داره و در واقع فعلا می خوام نسخه 64 بیتی مثل نسخه 32 بیتی حداقل بدون خطا اجرا بشه.
    برای خطا تقسیم بر 0 راههای زیادی وجود داره ولی ساده ترین چک کردن مقادیر متغیرها قبل از عملیات تقسیم هست
    برای خطا اندیس خارج از محدوده هم باید با استفاده از شرطهای کنترلی کنترل کنید یعنی قبل از هربار فراخوانی آفست آرایه ابتدا کنترل کنید که اندیس مورد اشاره تون بزرگتر از طول آرایه نباشه البته اگر امکان داشت براتون از ساختمان داده های سبک مثل std::vector , std::array استفاده کنید
    در صورتی که مایل بودید میتونید تکه کدتون را همین جا قرار بدید




تاپیک های مشابه

  1. map شدن document Library به عنوان Network Drive روی ویندوز سرور
    نوشته شده توسط sarasara در بخش مدیریت در شیرپوینت (Sharepoint Administration)
    پاسخ: 0
    آخرین پست: سه شنبه 12 مرداد 1395, 21:38 عصر
  2. سوال: آیا Microsoft Enterprise Library هنوز هم توسط مایکروسافت پشتیبانی میشه؟
    نوشته شده توسط iman_ad در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: جمعه 20 بهمن 1391, 15:32 عصر
  3. سوال: خطای Exception of type 'System Exception' was thrown در اجرای تست
    نوشته شده توسط saeed6162 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: سه شنبه 10 مرداد 1391, 11:11 صبح
  4. سوال: بروز Exception در ایجاد ارتباط با sql server از طریق C#‎
    نوشته شده توسط bluelife در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 0
    آخرین پست: پنج شنبه 21 آبان 1388, 13:50 عصر
  5. ادامه كار در صورت بروز Exception
    نوشته شده توسط A.Nemati در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: دوشنبه 24 تیر 1387, 12:31 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •