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应处理其依赖项等)

感谢您的建议,但它似乎不起作用。我编辑了我的问题,澄清了头文件中的错误。这可能不是缺少依赖项标题的问题。谢谢您的建议,但它似乎不起作用。我编辑了我的问题,澄清了头文件中的错误。这可能不是缺少依赖项标题的问题。