将依赖关系Shell32.lib添加到WDK makefile

我已成功通过WDK XPSDrv示例项目,并将其修改为执行我所需的操作。 但是,我绝对不知道如何让构build脚本引用/包括/无论shell32.lib。 我是一个.NET的家伙! 这是奇怪而可怕的领土。

我认为添加一个依赖引用是我需要做的。 当我编译我得到这个错误

3>errors in directory c:\winddk\7600.16385.1\src\printgit\xpsdrvsmpl\ src\filters\common 3>c:\winddk\7600.16385.1\src\printgit\xpsdrvsmpl\src\filters\common\ xdstrmflt.cpp(238) : error C3861: 'ShellExecute': identifier not found 

由于我极度缺乏知识(和匆忙),我没有使用visual studio,只是在记事本++和shell wdk构build环境中使用了简单的mod。 我有一个VS的代理项目,我一直在编写和testing小块代码。 在那个项目中,我添加了一个依赖库到shell32.lib ,一切都很完美。

有一个引用sources的makefile,内容如下。

这并不重要,但需要shell32的代码是

 HINSTANCE statu = ShellExecute(NULL,TEXT("open"),szTempFileName,NULL,NULL,9); 

这是sources文件。

 INCLUDES=$(INCLUDES); \ .\; \ .\..\inc; \ .\..\debug; \ $(DDK_INC_PATH); \ $(SDK_INC_PATH)\gdiplus; \ USE_ATL=1 USE_STL=1 ATL_VER=70 STL_VER=70 # We use STL 7.0, which is not available pre-Vista. We therefore set USE_LIBCMT=1 # If STL 7.0 is not necessary, USE_MSVCRT=1 is recommended USE_LIBCMT=1 USE_IDLBASED_DLLDATA=1 USE_OBJECT_ROOT=1 MSC_WARNING_LEVEL=/W4 /WX USE_NATIVE_EH=1 PRECOMPILED_CXX=1 PRECOMPILED_INCLUDE=precomp.h # To remove debug code remove -DDBG from the line below C_DEFINES=$(C_DEFINES) -D_UNICODE -DUNICODE SOURCES=\ bkpchndlr.cpp \ bkpthndlr.cpp \ bkschema.cpp \ cmpthndlr.cpp \ cmprofpthndlr.cpp \ cmprofpchndlr.cpp \ cmintpthndlr.cpp \ cmschema.cpp \ cmprofileschema.cpp \ cmintentsschema.cpp \ globals.cpp \ nupschema.cpp \ nupchndlr.cpp \ nupthndlr.cpp \ pchndlr.cpp \ pgscpchndlr.cpp \ pgscpthndlr.cpp \ pgscschema.cpp \ porientpthndlr.cpp \ porientschema.cpp \ psizepthndlr.cpp \ psizeschema.cpp \ pimagepthndlr.cpp \ pimageschema.cpp \ pshndlr.cpp \ pthndlr.cpp \ ptquerybld.cpp \ schema.cpp \ wmpchndlr.cpp \ wmpthndlr.cpp \ wmschema.cpp \ workbuff.cpp TARGETNAME=xdsmplcmn TARGETTYPE=LIBRARY 

例如在你的sources文件中:

 TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib $(SDK_LIB_PATH)\user32.lib $(SDK_LIB_PATH)\shell32.lib 

…根据需要修改;)

但是,你的错误实际上不是一个链接器错误,而是一个编译器错误,所以你可能想要以某种方式包含声明ShellExecute的头文件shellapi.h


刚刚在我的WDK(7600.16385.1)中查看了这个示例,事实上,您删除了下面转载的非常重要的部分,您只需要将其他.lib文件添加到以下链接:

 TARGETLIBS= \ $(SDK_LIB_PATH)\kernel32.lib \ $(SDK_LIB_PATH)\user32.lib \ $(SDK_LIB_PATH)\winspool.lib \ $(SDK_LIB_PATH)\ole32.lib \ $(SDK_LIB_PATH)\oleaut32.lib \ $(SDK_LIB_PATH)\advapi32.lib \ $(SDK_LIB_PATH)\msxml6.lib \ $(SDK_LIB_PATH)\uuid.lib \ $(SDK_LIB_PATH)\Comdlg32.lib \ $(OBJ_PATH)\..\debug\$O\xdsdbg.lib \ $(OBJ_PATH)\..\common\$O\xdsmplcmn.lib \ 

…道歉,有很多的sources文件作为这个样本的一部分,所以当然我不能真正知道你修改了哪些样本,并试图建立:)