VSCode C/C++;Intellisense和Windows特定库 我正在用C++中的一些特定于Windows的库(使用C++代码中的C库)进行实验。我试图为CoCreateInstance()函数包含objbase.h: #include <objbase.h> // ... HRESULT hr = CoCreateInstance(/* ... */);
其中VSCode C/C++;Intellisense和Windows特定库 我正在用C++中的一些特定于Windows的库(使用C++代码中的C库)进行实验。我试图为CoCreateInstance()函数包含objbase.h: #include <objbase.h> // ... HRESULT hr = CoCreateInstance(/* ... */);,c++,c,windows,visual-studio-code,intellisense,C++,C,Windows,Visual Studio Code,Intellisense,其中WINOLEAPI是包含以下内容的宏: extern __declspec(dllimport) int __stdcall 我假设\uu declspec和\uu stdcall是一些特定于Windows的关键字,intellisense只是不识别这些关键字,检测到一个错误,导致函数未声明,因此标识符未定义“错误 这是问题的原因吗?如果是这样的话,有没有办法“教”intellisense一些关于windows特定关键字的信息?毕竟它是一个微软的扩展,我不知道为什么它不能识别微软的C语言扩
WINOLEAPI
是包含以下内容的宏:
extern __declspec(dllimport) int __stdcall
我假设\uu declspec
和\uu stdcall
是一些特定于Windows的关键字,intellisense只是不识别这些关键字,检测到一个错误,导致函数未声明,因此标识符未定义“
错误
这是问题的原因吗?如果是这样的话,有没有办法“教”intellisense一些关于windows特定关键字的信息?毕竟它是一个微软的扩展,我不知道为什么它不能识别微软的C语言扩展
使现代化
我找到了一个临时的解决办法。见下面我的答案
更新:澄清
似乎
combaseapi.h
和objbase.h
都包含了它们所需的所有依赖项,因为即使是intellisense也能够将\uuuuuu declspec
(和\uuu stdcall
)识别为一些“int\uu declspec”
,但它无法理解语法,其中类型被其他关键字包围。它在WINOLEAPI
宏上给出了一个“explicit type is missing”错误。当我将宏的值显式地替换为“extern\uu declspec(dllimport)int\uu stdcall”
时,会出现类似“missing;”
的错误。看来它不懂这种语法。我找到了一个临时解决办法。WINOLEAPI
宏在combaseapi.h
文件中定义。我在WINOLEAPI
定义之后将这些行添加到文件中:
// Original content of the file:
#ifdef _OLE32_
#define WINOLEAPI STDAPI
#define WINOLEAPI_(type) STDAPI_(type)
#else
#define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
#define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
#endif
// Added fix for VSCode intellisense:
#ifdef __INTELLISENSE__
#define WINOLEAPI EXTERN_C HRESULT
#define WINOLEAPI_(type) EXTERN_C type
#endif
现在,当定义了\uuuu INTELLISENSE\uuuu
时(编译代码时未定义,但仅当INTELLISENSE检查文件时才定义),它将从WINOLEAPI
宏中删除无法识别的关键字
不过,在我的代码中应用一些类似的修复程序,而不是修改包含的头还是不错的。此外,这只修复了这种特殊情况,任何其他不受支持的关键字都必须单独处理。在我的例子中,它修复了这两个头文件中的所有问题
这是可行的,但如果有人能提供更好的解决方案,我将不胜感激。我找到了一个临时解决办法。
WINOLEAPI
宏在combaseapi.h
文件中定义。我在WINOLEAPI
定义之后将这些行添加到文件中:
// Original content of the file:
#ifdef _OLE32_
#define WINOLEAPI STDAPI
#define WINOLEAPI_(type) STDAPI_(type)
#else
#define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
#define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
#endif
// Added fix for VSCode intellisense:
#ifdef __INTELLISENSE__
#define WINOLEAPI EXTERN_C HRESULT
#define WINOLEAPI_(type) EXTERN_C type
#endif
现在,当定义了\uuuu INTELLISENSE\uuuu
时(编译代码时未定义,但仅当INTELLISENSE检查文件时才定义),它将从WINOLEAPI
宏中删除无法识别的关键字
不过,在我的代码中应用一些类似的修复程序,而不是修改包含的头还是不错的。此外,这只修复了这种特殊情况,任何其他不受支持的关键字都必须单独处理。在我的例子中,它修复了这两个头文件中的所有问题
它是有效的,但如果有人能提供更好的解决方案,我将不胜感激
windows.h包含必需的定义,如HRESULT
(实际上来自winerror.h,但包括windows.h应负责其依赖项等)添加#包括objbaseapi.h上方的
windows.h包括所需的定义,如HRESULT
(实际上来自winerror.h,但包括windows.h应处理其依赖项等)感谢您的建议,但它似乎不起作用。我编辑了我的问题,澄清了头文件中的错误。这可能不是缺少依赖项标题的问题。谢谢您的建议,但它似乎不起作用。我编辑了我的问题,澄清了头文件中的错误。这可能不是缺少依赖项标题的问题。