尝试使用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"
答案 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_WINNT
与NTDDI_VERSION
的关系: