【发布时间】:2018-12-28 21:36:30
【问题描述】:
我正在尝试使用 C++ 中的一些 Windows 特定库(在我的 C++ 代码中使用 C 库)。我正在尝试将objbase.h 包含在CoCreateInstance() 函数中:
#include <objbase.h>
// ...
HRESULT hr = CoCreateInstance(/* ... */);
我的问题在于 VSCode C/C++ 扩展的智能感知。代码编译正常,但智能感知在识别此函数时存在一些问题。 HRESULT 没问题,但CoCreateInstance() 显示"identifier is undefined"。
所以我尝试查看头文件本身并发现问题在于,智能感知识别文件中的一些错误并且不允许我使用该函数,因为它认为它没有正确声明。 HRESULT 没有问题,因为它只是一些简单的typedef,它可以理解。然而CoCreateInstance() 被声明为:
WINOLEAPI CoCreateInstance( //...
WINOLEAPI 是一个宏,其中包含以下内容:
extern __declspec(dllimport) int __stdcall
我假设 __declspec 和 __stdcall 是一些特定于 Windows 的关键字,并且智能感知根本无法识别这些关键字,检测到错误,这使得函数未声明,因此出现 "identifier is undefined" 错误。
这是问题的原因吗?如果是这样,是否有任何方法可以“教”智能感知有关这些 Windows 特定关键字的信息?毕竟它是微软的扩展,我不知道为什么它不能识别微软的 C 语言扩展。
更新
我找到了一个临时修复。请参阅下面的答案。
更新:澄清
似乎combaseapi.h 和objbase.h 都包含了它们需要的所有依赖项,因为即使是智能感知也能够将__declspec(和__stdcall)识别为一些"int __declspec",但它无法理解语法,其中类型被其他关键字包围。它在WINOLEAPI 宏上给我一个“缺少显式类型”错误。当我将宏的值明确替换为"extern __declspec(dllimport) int __stdcall" 时,它会给我类似"missing ;" 的错误。看来,它不理解这样的语法。
【问题讨论】:
标签: c++ c windows visual-studio-code intellisense