【发布时间】:2011-04-08 08:34:27
【问题描述】:
我已经开始使用 WDK / DDK(我假设它们是同一个东西)示例,尤其是打印机端口监视器示例。我已经使用他们的构建工具进行了编译,我可以附加到假脱机进程并调试...好东西!
.. 当我只想写一些调试时,问题就来了。我真的认为这会很简单(有一段时间没有做 c++ 了!)但它似乎不是!
我遇到的当前问题只是尝试创建 std::wchar 的实例,如下所示:
std::wstring test("Blah");
问题是,当我使用 wdk 构建工具进行编译时,出现以下错误:
1>c:\winddk\7600.16385.1\src\print\monitors\localmon\localmon.c(361) :
error C2143: syntax error : missing ';' before ':'
1>c:\winddk\7600.16385.1\src\print\monitors\localmon\localmon.c(363) :
error C2143: syntax error : missing ';' before 'type'
我猜这是因为编译器可能不理解 std:: 位?行号指向上面的 wstring 声明。
我添加了include <string.h>,但这没有帮助,我的源文件如下:
!IFNDEF MSC_WARNING_LEVEL
MSC_WARNING_LEVEL=/W3
!ENDIF
MSC_WARNING_LEVEL=$(MSC_WARNING_LEVEL) /WX
C_DEFINES=-DUNICODE -D_UNICODE -D_SPL_CLUST
TARGETNAME=ddklocalmon
TARGETTYPE=DYNLINK
DLLENTRY=_DllMainCRTStartup
DLLDEF=localmon.def
DLLORDER=localmon.prf
TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib \
$(SDK_LIB_PATH)\advapi32.lib \
$(SDK_LIB_PATH)\user32.lib \
$(SDK_LIB_PATH)\ws2_32.lib \
$(SDK_LIB_PATH)\spoolss.lib
INCLUDES=$(INCLUDES); \
$(DDK_INC_PATH); \
USE_MSVCRT=1
SOURCES=localmon.rc \
localmon.c \
winspool.c \
util.c \
config.c \
xcv.c \
irda.c \
mem.c \
PRECOMPILED_INCLUDE=precomp.h
另外,如果我让 wstring 正常工作,我将使用它和 OutputDebugString() 来处理我对 Visual Studio 输出控制台的调试,但我想我已经读到某处可能无法在端口监视器运行时工作在内核模式下?
如果有人能对此有所了解,我将不胜感激! :)
安迪。
【问题讨论】:
-
正如其他人指出的那样,您需要包含
<string>,而不是<string.h>。除此之外,宽字符串文字有一个L前缀std::wstring test(L"Blah");。 -
酷,谁能回答剩下的问题,即在 c / 端口监视器中调试的最佳方式?
-
记录/跟踪的标准基础设施是Event Tracing for Windows。它内置于系统中,可以在运行时启用和禁用,并且可以在用户态和内核模式代码中使用。
标签: c++ compiler-construction driver wdk