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

C++ Windows jumplist classes are not being identified

本文关键字:列表 Windows 识别 C++      更新时间:2023-10-16

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

第 19 行出现错误,因为无法识别ICustomDestinationList

c:usersgremblindownloadsmicrosip-3.9.2-srcmicrosip-3.9.2-srcjumplist.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"

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

默认情况下NTDDI_VERSIONsdkddkver.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的关系:

使用 Windows 标头