Я успешно проработал образец проекта WDK XPSDrv и изменил его, чтобы сделать то, что мне нужно. Тем не менее, я абсолютно не могу понять, как получить скрипты сборки для ссылки/include/whatever shell32.lib. Я парень .NET! Это странная и страшная территория.Добавить зависимость от Shell32.lib к make-файлу WDK
Я думаю, что добавление ссылки на зависимость - это то, что мне нужно сделать. Когда я компилирую, я получаю эту ошибку
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 ++ и среду сборки оболочки WDK. У меня есть суррогатный проект в VS, где я писал и тестировал небольшие куски кода. В этом проекте я добавил библиотеку Dependency в shell32.lib
, и все сработало отлично.
Существует файл makefile, который ссылается на sources
, содержание ниже.
Не так уж важно, но код, который требует 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
вы находитесь святой. Я только что вычислил источник, выполнив astrogrepping ВСЕ для kernel32.lib, чтобы найти пример. Вероятно, вытащил бы мои волосы, прежде чем я понял, что это ошибка компилятора. – scaryman
Заголовки, включенные в мое приложение для тестирования визуальной студии, должны были включать shellapi.h где-то, потому что это не было включено в мой тестовый проект, который работал нормально. странно. – scaryman
@scaryman: возможно, через предварительно скомпилированный заголовок 'stdafx.h', который включает в себя всевозможные вещи при включении' Windows.h' и где часто обнаруживается '# define' перед этим '# include', чтобы предотвратить определенные неявные' # include 'от происходящего через' Windows.h' и так далее. Конечно, некоторые заголовки MFC/ATL/WTL, которые вы, возможно, использовали, также могут использовать 'shellapi.h'. – 0xC0000022L