**自http://blog.programfan.com/article.asp?id=9864
首先宣告的是, c++ 中的異常處理機制是建立在 windows 平台上的 seh 機制之上,所以 seh 當然可以在 c++ 程式中使用。不過「阿愚」多次強調過,我們平常一般狹義上的 seh 都是指 try-except 和 try-finally 異常機制,而它們是給 c 語言( vc 環境)編寫 windows driver 而設計的,所以 seh 主要應該在 c 程式中被使用,而 c++ 程式則應該使用 try-catch 機制的 c++ 異常處理模型( micorsoft 的 msdn 一直強烈建議程式設計師遵循此規則)。但是, seh 到底能在 c++ 程式中使用嗎?「當然可以,肯定可以」,其實在一開始闡述 windows 平台多種異常機制之間的關係時,就已經清楚地表明了這一點。
這篇文章系統地來看看 seh 在 c++ 程式中的各種使用情況。
其實簡單的例子,就是把以前的使用 seh 機制的 c 程式,改稱 c++ 程式,看它能正常編譯和執行否?什麼意思,很簡單,就是把原來的 .c 程式的副檔名改為 .cpp 檔案,也即此時 vc 編譯器會採用 c++ 語言來編譯此程式(這也即為 c++ 程式了)。朋友們試試吧!**如下:
// 注意,這是 c++ 程式,檔名為: seh-test.cpp
#include "stdio.h"
void test()
int* p = 0x00000000; // pointer to null
__try
puts("in try");
__try
puts("in try");
// causes an access violation exception;
// 導致乙個儲存異常
*p = 13;
puts(" 這裡不會被執行到 ");
__finally
puts("in finally");
puts(" 這裡也不會被執行到 ");
__except(puts("in filter 1"), 0)
puts("in except 1");
void main()
puts("hello");
__try
test();
__except(puts("in filter 2"), 1)
puts("in except 2");
puts("world");
是不是能編譯通過,而且執行結果也和以前 c 程式的執行結果完全一致,如下:
hello
in try
in try
in filter 1
in filter 2
in finally
in except 2
world
press any key to continue
也許很多程式設計師朋友對上面的例子不以為然,覺得它說明不了什麼問題。好的,現在我們來看乙個 真正意義上的 c++ 程式,且使用 seh 機制。什麼是真正意義上的 c++ 程式,當然是採用了物件導向技術。看例子吧!**如下(其實就是在上面程式的基礎上加了乙個 class ):
// 注意,這是 c++ 程式,檔名為: seh-test.cpp
#include "stdio.h"
class a
public:
void f1() {}
void f2() {}
void test1()
a a1;
a a2,a3;
a2.f1();
a3.f2();
void test()
int* p = 0x00000000; // pointer to null
__try
// 這裡呼叫 test1 函式,它函式內部會創造 object
// 應該屬於 100% 的 c++ 程式了吧!
test1();
puts("in try");
__try
puts("in try");
// causes an access violation exception;
// 導致乙個儲存異常
*p = 13;
puts(" 這裡不會被執行到 ");
__finally
puts("in finally");
puts(" 這裡也不會被執行到 ");
__except(puts("in filter 1"), 0)
puts("in except 1");
void main()
puts("hello");
__try
test();
__except(puts("in filter 2"), 1)
puts("in except 2");
puts("world");
在C 程式中使用系統熱鍵
1.首先引入system.runtime.interopservices using system.runtime.interopservices 2.在類內部宣告兩個api函式,它們的位置和類的成員變數等同.system.runtime.interopservices.dllimport user...
在C 程式中使用系統熱鍵
在c 程式中使用系統熱鍵 分類 winform 2009 1 18 13 22 44 junglesong.1.首先引入system.runtime.interopservices usingsystem.runtime.interopservices 2.在類內部宣告兩個api函式,它們的位置和類...
在C 程式中使用ocx的方法
在做乙個wpf的專案時 vs2008,c 需要引用乙個使用c 編譯的ocx元件,但是執行的時候經常報錯,無法使用其中提供的介面和方法。上網查了一下解決辦法,方法很多,但是很多都沒有奏效。最終找到了乙個比較有效的方法,下面就是在我的程式中能夠成功使用的例子,分享一下。雖然已經是去年的了 1 在c 工程...