ExampleEleven.cpp
上传用户:skywee
上传日期:2021-12-09
资源大小:141k
文件大小:1k
源码类别:

文件格式

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <excpt.h>
  3. #include <windows.h>
  4. #include <eh.h>
  5. class CSE{
  6. public:
  7. static void MapSE2CE()
  8. {
  9. _set_se_translator(TranslateSE2CE);
  10. }
  11. operator DWORD()
  12. {
  13. return m_er.ExceptionCode;
  14. }
  15. private:
  16. CSE(PEXCEPTION_POINTERS pep)
  17. {
  18. m_er=*pep->ExceptionRecord;
  19. m_context=*pep->ContextRecord;
  20. }
  21. static void _cdecl TranslateSE2CE(UINT dwEC,PEXCEPTION_POINTERS pep)
  22. {
  23. throw CSE(pep);
  24. }
  25. private:
  26. EXCEPTION_RECORD m_er;
  27. CONTEXT  m_context;
  28. };
  29. int main(int argc, char* argv[])
  30. {
  31. //注意,应该在每个线程的入口点调用该静态成员函数。
  32. CSE::MapSE2CE();
  33. try
  34. {
  35. int *pi=NULL;
  36. *pi=0;
  37. int x=0;
  38. x=5/x;
  39. }
  40. catch(CSE se)
  41. {
  42. switch(se)
  43. {
  44. case EXCEPTION_ACCESS_VIOLATION:
  45. //...
  46. break;
  47. case EXCEPTION_INT_DIVIDE_BY_ZERO:
  48. //...
  49. break;
  50. default:
  51. throw;
  52. break;
  53. }
  54. }
  55. return 0;
  56. }