我已经开始使用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 :: bit可能吗?行号指向上面的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输出控制台的调试,但是我认为我读到的内容可能不起作用,因为端口监视器以内核模式运行?
如果有人能对此有所启示,我将不胜感激! :)
安迪
最佳答案
std::string
和std::wstring
是C ++类(对于C ++类实际上是typedef),并且您正在编译.c文件。
在驱动程序中使用C ++运行时库有些奇怪,我不知道它是否有效。
如果要在哪里编译为C ++,则include是<string>
而不是<string.h>
。