Windows SEH非常处理惩罚讨论

[复制链接]
发表于 2025-12-30 23:09:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Windows C++步伐非常的范例

在Windows C++非常的场景中,我们须要明白以下两种范例的非常:
      
  • C++语言抛出的非常。
         
    • 这是利用C++ throw抛出的exception,利用C++ try-catch即可捕捉。   
    • 即便是来自于另一个DLL的C++ exception,仍然能利用C++ try-catch捕捉。   
       
  • 访问利用体系受掩护内存导致的非常。
         
    • 利用Windows API函数SetUnhandledExceptionFilter()可捕捉。   
    • 利用C++ try-catch无法捕捉。   
      
试验与分析

C++语言抛出的非常

即用C++ throw关键字抛出的C++ exception,则利用C++ try-catch即能捕捉。已用如下样例代码证明:
  1. // This is the main program, which links to DLL1
  2. // main.cpp
  3. #include <iostream>
  4. int main()
  5. {
  6.     try
  7.     {
  8.         ThrowCppException();
  9.     }
  10.     catch (std::exception& e)
  11.     {
  12.         std::cout << e.what() << "\n";
  13.     }
  14.     std::cout << "Program finished normally\n";
  15.     return 0;
  16. }
复制代码
  1. // DLL1, this is a Dynamic Link Library(DLL)
  2. // DLLTest.h
  3. #pragma once
  4. #if defined(DLL1_EXPORTS)
  5. #define DLL1_SYMBOL_EXPORT __declspec(dllexport)
  6. #else
  7. #define DLL1_SYMBOL_EXPORT __declspec(dllimport)
  8. #endif
  9. DLL1_SYMBOL_EXPORT void ThrowCppException();
复制代码
  1. // DLL1, this is a Dynamic Link Library(DLL)
  2. // DLLTest.cpp
  3. #include "DLLTest.h"
  4. #include <exception>
  5. void ThrowCppExc
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表