【问题标题】:Why doesn't Intellisense show VC++ definition of "interface" macro?为什么 Intellisense 不显示“接口”宏的 VC++ 定义?
【发布时间】:2016-06-23 15:20:04
【问题描述】:

这是我正在使用的一段代码:

interface ClassFactory : public IClassFactory
{
    // *** IUnknown methods ***

    STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR *ppv);
    STDMETHOD_(ULONG, AddRef)();
    STDMETHOD_(ULONG, Release)();

    // *** IClassFactory methods ***

    STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR *ppvObject);
    STDMETHOD(LockServer)(BOOL fLock);

public:
    ClassFactory();

private:
    ULONG RefCount;
};

VS2015 颜色编码关键字如“public”和“private”为蓝色,用户定义类型如“ULONG”和“IClassFactory”为蓝绿色,宏如“STDMETHOD”和“REFIID”为紫色(嗯,也许这就是“茄子”)。对于用户定义的类型和宏,我可以让 Intellisense 通过简单地将光标悬停在符号上来显示定义。因此,如果我将光标放在紫色符号“FAR”上,我会在屏幕上的灰色框中看到 #define FAR far

符号“接口”用紫色进行颜色编码,就像宏一样。此外,我必须包含 Unknwn.h 才能使用它(将 Unknwn.h 排除在外会导致它被标记为蓝色,并标有“标识符'接口'未定义”错误)。深入 Unknwn.h(然后进入 objbase.h,然后进一步进入 combaseapi.h),我发现这些行:

#define __STRUCT__ struct
#define interface __STRUCT__

因此,“接口”显然是一个宏,就像 FAR 一样。然而,即使 VS2015 对它进行了颜色编码,当我将光标悬停在它上面时,我并没有像我预期的那样得到一个显示 #define interface __STRUCT__ 的灰色框。此外,如果我右键单击它,包含“Peek Definition”和其他条目的弹出菜单会让我看到在上下文中定义宏的行,这些条目会变灰。

为什么 Intellisense 不显示接口宏的定义?

(顺便说一句,我认为在上面的代码-sn-p 中使用“接口”是一种糟糕的技术,因为它声明的“接口”包含一个成员变量;它可能应该是“类”。我'我只是对 IDE 的行为感到困惑,希望有人可以向我解释。)

【问题讨论】:

  • hmmm,可能与 interface 是 C# 关键字有关。想知道 Intellisense 的悬停是否有一些混乱
  • 这只是一个错误,EDG 前端一直在努力跟上 C++/CX 和 C++/CLI 扩展。使用 connect.microsoft.com 来提醒他们。考虑使用__interface 扩展关键字来获得编译错误。
  • @vu1p3n0x 可能是对的:如果我不包含 Unknwn.h,但将我自己的 #define interface struct 添加到我的代码中,则行为是相同的。但是,将interface 更改为interfact,IDE 就会正常运行。 @Hans Passant,我按照你的建议做了。
  • 无论如何,这是一个错误

标签: visual-studio-2015 macros intellisense


【解决方案1】:

Microsoft 已通过电子邮件与我确认这是一个错误,但它已在 Visual Studio 2015 Update 2 中得到修复。我今天下载并安装了Update 3,事实上,该错误消失了。 Intellisense 现在显示在 Unknwn.h 中声明的宏“接口”的定义,如果您单击右键菜单上的“转到定义”,它将打开该文件。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2012-08-12
    • 2019-02-08
    • 2019-12-08
    • 2021-09-03
    相关资源
    最近更新 更多