自 Visual Studio 2017 15.5.1 以来 _com_ptr_t 的智能感知错误
Intellisense error with _com_ptr_t since Visual Studio 2017 15.5.1
我有一个 _com_ptr_t
实例化是通过导入 .tlb 文件生成的,用于以下...
#import "object.tlb"
void demo()
{
IObjectPtr p;
p.CreateInstance(__uuidof(Object));
p->DoSomething();
}
在 VS2017 15.5.1 之前,此代码已被 Intellisense 正确解析并构建良好。现在,在 15.5.1 及更高版本中,当 p->DoSomething()
时,我在 CreateInstance
和 p
下都看到了波浪线,如下所示,Intellisense 工具提示被注释为注释。
#import "object.tlb"
void demo()
{
IObjectPtr p;
// class "_com_ptr_t<_com_IIID<IObject, &__uuidof(IObject)>>"
// has no member "CreateInstance"
p.CreateInstance(__uuidof(Object));
// expression must have a pointer type.
p->DoSomething();
}
有趣的是,当我点入对象时,Intellisense 仅显示一个可用成员 GetIID
,但代码构建和运行没有问题。
我试过忽略这些波浪线,但我在代码中使用了很多 com 调用,很难从一堆虚假错误中筛选出真正的错误。我试过清理和重建。我试过删除 .vs 目录。我试过清除组件缓存。没有任何效果。给出了什么?
更新
看起来问题已在 VS 的 15.8 更新中得到修复。
旧答案
我们在项目中遇到过类似的问题。
我注意到它只有在我们切换到 C++17 语言标准时才会出现。回到 c++14 可以使 Intellisense 正常运行。
我有一个 _com_ptr_t
实例化是通过导入 .tlb 文件生成的,用于以下...
#import "object.tlb"
void demo()
{
IObjectPtr p;
p.CreateInstance(__uuidof(Object));
p->DoSomething();
}
在 VS2017 15.5.1 之前,此代码已被 Intellisense 正确解析并构建良好。现在,在 15.5.1 及更高版本中,当 p->DoSomething()
时,我在 CreateInstance
和 p
下都看到了波浪线,如下所示,Intellisense 工具提示被注释为注释。
#import "object.tlb"
void demo()
{
IObjectPtr p;
// class "_com_ptr_t<_com_IIID<IObject, &__uuidof(IObject)>>"
// has no member "CreateInstance"
p.CreateInstance(__uuidof(Object));
// expression must have a pointer type.
p->DoSomething();
}
有趣的是,当我点入对象时,Intellisense 仅显示一个可用成员 GetIID
,但代码构建和运行没有问题。
我试过忽略这些波浪线,但我在代码中使用了很多 com 调用,很难从一堆虚假错误中筛选出真正的错误。我试过清理和重建。我试过删除 .vs 目录。我试过清除组件缓存。没有任何效果。给出了什么?
更新 看起来问题已在 VS 的 15.8 更新中得到修复。
旧答案 我们在项目中遇到过类似的问题。 我注意到它只有在我们切换到 C++17 语言标准时才会出现。回到 c++14 可以使 Intellisense 正常运行。