gpt4 book ai didi

c++ - 将对 Shell32.lib 的依赖添加到 WDK 生成文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:30 25 4
gpt4 key购买 nike

我已经成功地完成了 WDK XPSDrv 示例项目并对其进行了修改以执行我需要的操作。但是,我绝对不知道如何让构建脚本引用/包含/whatever 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,只是使用 notepad++ 中的简单 mod 和 shell wdk 构建环境。我在 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文件作为这个示例的一部分,所以我当然不能真正知道你修改了哪些示例并试图构建:)

关于c++ - 将对 Shell32.lib 的依赖添加到 WDK 生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com