امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
(حتما بخونید) Bypass Exceptions
نویسنده پیام
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #1
(حتما بخونید) Bypass Exceptions
دورود به همه دلفی کارهای قهرمان Biggrin

مطمئنا برای همه شما پیش اومده که وسط برنامه هاتون با Error مواجه بشید و بعد برنامتون خود به خود Crash بشه
خب اولین چیزی که به زهنتون میرسه استفاده از دستورات "try...finally" یا "try...Except" هستش که خطاها رو نادیده میگیره.

ولی بعضی وقتها هم هست که اوضاع خیلی بد تر از این حرفاها میشه و تصویر زیر براتون ظاهر میشه...

[تصویر:  exp.png]

حالا باید چیکار کرد؟

تو این مقاله می خوام تابعی رو بهتون معرفی کنم که به صورت Global عمل میکنه و کل Exception های پروسه تون رو Bypass میکنه


تابع مورد نظر "SetUnhandledExceptionFilter" هستش که میاد کل پروسه رو در بر میگیره

معرفی کلی تابع به شکل زیر هستش:


کد:
function SetUnhandledExceptionFilter(lpTopLevelExceptionFilter: TFNTopLevelExceptionFilter):
TFNTopLevelExceptionFilter; stdcall;

و روش استفاده اون هم به صورت زیر:


کد:
function EXP(const ExceptionInfo: TExceptionPointers): LongWord; stdcall;
begin
...
end;

خب در قسمت بالا خروجی رو میتونیم به اشکال مورد نیاز وارد کنیم


مثلا برای فیلتر کردن و نادیده گرفتن Except ها به شکل زیر عمل میشه

کد:
const
EXCEPTION_CONTINUE_EXECUTION =$ffffffff;
EXCEPTION_EXECUTE_HANDLER = $1;
EXCEPTION_CONTINUE_SEARCH = $0;

function EXP(const ExceptionInfo: TExceptionPointers): LongWord; stdcall;
begin
Result := EXCEPTION_CONTINUE_EXECUTION;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetUnhandledExceptionFilter (@EXP);
end;

(آخرین ویرایش در این ارسال: ۱۸-مرداد-۱۳۹۱, ۱۸:۰۴:۲۹، توسط veyskarami.)
۱۸-مرداد-۱۳۹۱, ۱۷:۵۹:۲۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, Majid_Ebru, godvb
godvb غایب
مدیر بازنشسته بخش نفوذ و امنیت
*****

ارسال‌ها: 430
موضوع‌ها: 77
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 886
( 1338 تشکر در 343 ارسال )
ارسال: #2
RE: (حتما بخونید) Bypass Exceptions
درود بر اسپارتاکوس دلفی کارها Biggrin

ارش جان من اکثر اوقات از TApplicationEvent و OnException ش استفاده میکنم، به نظرت این جوابگو نیست؟وآیا کل پروسه رو در برمیگیره؟

درضمن نگفتی توی همه ورژن های دلفی هست یا نه فقط در ورژن های خاصی این تابع قابل استفاده می باشد.

دمت جیز.

آنچه توانسته ایم انجام دهیم، لطف پرودگار بوده است.

XMen For Ever
۰۳-شهریور-۱۳۹۱, ۱۳:۵۶:۳۰
ارسال‌ها
پاسخ
تشکر شده توسط : veyskarami
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #3
RE: (حتما بخونید) Bypass Exceptions
درود دوست من :x
نه دستور OnException فقط در محدوده همون تابع یا پروسیجری که نوشتی عمل میکنه و برای کل پروسه نیست.
بله این یه تابع api هست و قاعدتا باید تو همه ورژن های دلفی جواب بده.

۰۹-شهریور-۱۳۹۱, ۰۱:۴۲:۵۶
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  اگه كسي راجع به html اطلاع داره حتما جواب بده seyyed 0 1,538 ۱۰-اسفند-۱۳۸۴, ۱۲:۰۹:۰۹
آخرین ارسال: seyyed

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS