2012-05-05 2 views
1

Я успешно проработал образец проекта 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 

ответ

1

Например, в файле 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 файлов как часть этого образца, поэтому, конечно, я не могу знать, какой из образцов вы изменяли и пытаются построить :)

+0

вы находитесь святой. Я только что вычислил источник, выполнив astrogrepping ВСЕ для kernel32.lib, чтобы найти пример. Вероятно, вытащил бы мои волосы, прежде чем я понял, что это ошибка компилятора. – scaryman

+0

Заголовки, включенные в мое приложение для тестирования визуальной студии, должны были включать shellapi.h где-то, потому что это не было включено в мой тестовый проект, который работал нормально. странно. – scaryman

+0

@scaryman: возможно, через предварительно скомпилированный заголовок 'stdafx.h', который включает в себя всевозможные вещи при включении' Windows.h' и где часто обнаруживается '# define' перед этим '# include', чтобы предотвратить определенные неявные' # include 'от происходящего через' Windows.h' и так далее. Конечно, некоторые заголовки MFC/ATL/WTL, которые вы, возможно, использовали, также могут использовать 'shellapi.h'. – 0xC0000022L

Смежные вопросы