0

我不能在本机子系统中使用异常处理。

这是我的 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 __CxxThrowException@8 referenced in function _main

error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)

我该如何解决这个问题?

4

1 回答 1

0

此处描述了此问题:http: //www.codeproject.com/Articles/22801/Drivers-Exceptions-and-C,其解决方案可能有效,但可能导致未定义的行为。

但是,您的问题更简单:您需要使用一些 DDK 的东西编写用户模式程序。只需使用默认包含所有 CRT 库的 VC++ 构建环境(或 Windows SDK),并包含用于 DDK 内容的 ntddk.h 文件。

如果您想在驱动程序中使用 C++ 异常,答案很简单:永远不要这样做。

于 2012-05-09T14:40:10.127 回答