我已经通过WDK XPSDrv示例项目成功地完成了自己的工作,并对其进行了修改以满足我的需要。但是,我绝对无法弄清楚如何将构建脚本引用到shell32.lib / reference / include /。我是.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,而只是在notepad ++和shell wdk构建环境中使用简单的mod。我在VS中有一个代理项目,我一直在编写和测试一小段代码。在那个项目中,我在
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
的 header ,即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
文件,因此,我当然不能真正知道您修改了哪些示例并试图构建它们:)