我不能在本機子系統中使用異常處理。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])
我怎樣才能解決這個問題?
異常處理在驅動代碼中不是一個好主意......絕大多數DDK驅動程序都是用C而不是C++編寫的...... – Benj
[本文](http://msdn.microsoft.com/zh-cn/ -us/windows/hardware/gg487420)可以幫助你。具體來說,它說「C++異常需要一個內核模式安全的庫,目前不存在」。那是2007年;不知道,但我懷疑自那以後事情已經改變。 – leedm777
re your comment「在驅動程序中使用異常的確切缺點是什麼?爲什麼它很危險?」異常會導致一些真正可怕的代碼,並且不能真正解決任何我們無法用良好的代碼更好地解決的問題。他們吸引人的表現,並引進另一個失敗點,你必須依靠圖書館......我工作過的大多數地方都被編碼標準禁止。我只是勉強地把它們打開,因爲MS已經迫使Windows rt的問題。 rtti是另一件事實施是可怕的,在這兩種情況下,他們讓你支付你不使用 – jheriko