C ++ Windows跳转列表未被识别

时间:2014-12-10 22:55:56

标签: c++ visual-studio-2008 jump-list

尝试使用Visual Studio 2008构建软件电话源(microsip),但是没有识别Windows跳转列表类。

第19行出错,因为ICustomDestinationList未被识别

c:\users\gremblin\downloads\microsip-3.9.2-src\microsip-3.9.2-src\jumplist.h(19)
 : error C2143: syntax error : missing ';' before '*'


 1. #ifndef jumplist_h__
 2. #define jumplist_h__
 3. 
 4. #include <string>
 5. #include <shobjidl.h>
 6. #include <propkey.h>
 7. #include <propvarutil.h>
 8. 
 9. class JumpList
10. {
11.  public:
12.   JumpList(std::wstring AppID);
13.   ~JumpList();
14.   bool DeleteJumpList();
15.   void AddTasks();
16.
17.  private:
18.   HRESULT _CreateShellLink(PCWSTR pszArguments, PCWSTR pszTitle, IShellLinkW **ppsl, int iconindex = -1);
19.   ICustomDestinationList *pcdl;
20. };

#endif // jumplist_h__

我错过了什么吗?据我所知jumplist函数全部在"shobjidl.h"

1 个答案:

答案 0 :(得分:1)

shobjidl.h仅在ICustomDestinationList时定义NTDDI_VERSION >= NTDDI_WIN7,因此如果NTDDI_VERSION未设置为Windows 7或更高版本,编译器会抱怨。

NTDDI_VERSION默认定义为sdkddkver.h

#define NTDDI_VERSION_FROM_WIN32_WINNT2(ver)    ver##0000
#define NTDDI_VERSION_FROM_WIN32_WINNT(ver)     NTDDI_VERSION_FROM_WIN32_WINNT2(ver)

...

#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
#define  _WIN32_WINNT   0x0601
#endif

#ifndef NTDDI_VERSION
#ifdef _WIN32_WINNT
// set NTDDI_VERSION based on _WIN32_WINNT
#define NTDDI_VERSION   NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
#else
#define NTDDI_VERSION   0x06010000
#endif
#endif

因此,要么在项目中自己定义NTDDI_VERSION,要么将_WIN32_WINNT定义为适当的值,然后将其传播到NTDDI_VERSION

请参阅MSDN,了解_WIN32_WINNTNTDDI_VERSION的关系:

Using Windows Headers