2012-05-09 50 views
0

我不能在本機子系統中使用異常處理。wdk中的異常處理

這是我的cpp文件:

#include <ntddk.h> 
#include <exception> 

int __cdecl main() { 
    try 
    { 
     throw 20; 

    } 
    catch (int e) 
    { 

    } 

    return 0; 
} 

我的源文件:

TARGETNAME = native 
TARGETTYPE = PROGRAM 
UMTYPE = nt 
USER_C_FLAGS=$(USER_C_FLAGS) /EHa 
SOURCES = exeption.cpp \ 

INCLUDES=$(DDK_INC_PATH) 
MINWIN_SDK_LIB_PATH=$(SDK_LIB_PATH) 
TARGETLIBS=$(NTDLL_CRT) $(SDK_LIB_PATH)\ntdll.lib lib.lib 

而且我的錯誤的是:

error LNK2019: unresolved external symbol ___CxxFrameHandler3 referenced in function __ehhandler$_main 

error LNK2019: unresolved external symbol __EH_epilog3 referenced in function __catch$_main$0 

error LNK2019: unresolved external symbol __EH_prolog3_catch referenced in function _main 

error LNK2019: unresolved external symbol [email protected] referenced in function _main 

error LNK2001: unresolved external symbol "const type_info::`vftable'" ([email protected]@[email protected]) 

我怎樣才能解決這個問題?

+1

異常處理在驅動代碼中不是一個好主意......絕大多數DDK驅動程序都是用C而不是C++編寫的...... – Benj

+1

[本文](http://msdn.microsoft.com/zh-cn/ -us/windows/hardware/gg487420)可以幫助你。具體來說,它說「C++異常需要一個內核模式安全的庫,目前不存在」。那是2007年;不知道,但我懷疑自那以後事情已經改變。 – leedm777

+0

re your comment「在驅動程序中使用異常的確切缺點是什麼?爲什麼它很危險?」異常會導致一些真正可怕的代碼,並且不能真正解決任何我們無法用良好的代碼更好地解決的問題。他們吸引人的表現,並引進另一個失敗點,你必須依靠圖書館......我工作過的大多數地方都被編碼標準禁止。我只是勉強地把它們打開,因爲MS已經迫使Windows rt的問題。 rtti是另一件事實施是可怕的,在這兩種情況下,他們讓你支付你不使用 – jheriko

回答

0

這個問題在這裏描述:http://www.codeproject.com/Articles/22801/Drivers-Exceptions-and-C與解決方案,可能工作,但可能會導致未定義的行爲。

但是,你的問題更簡單:你需要用一些DDK的東西編寫用戶模式程序。只需使用默認包含所有CRT庫的VC++構建環境(或Windows SDK),幷包含用於DDK內容的ntddk.h文件。

如果你想在驅動程序中使用C++異常,答案很簡單:永遠不要這樣做。

+0

謝謝你回答我不寫驅動程序我在本地子系統中構建代碼 – native99

+0

什麼是確切的缺點在驅動程序中使用例外爲什麼它很危險? – native99

+0

1.類似於CodeProject文章中的自制解決方案可能會工作,但實際上可能會導致某些客戶站點每月發生一次未定義的行爲 - 程序開發中最糟糕的情況。 –