我已经开始使用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::stringstd::wstring是C ++类(对于C ++类实际上是typedef),并且您正在编译.c文件。

在驱动程序中使用C ++运行时库有些奇怪,我不知道它是否有效。

如果要在哪里编译为C ++,则include是<string>而不是<string.h>

07-28 03:14
查看更多