这是我正在使用的代码块:
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"和#34;私人"蓝色,用户定义的类型,如" 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定义"和其他条目让我看到在上下文中定义宏的行使这些条目变灰。
为什么没有Intellisense向我展示界面宏的定义?
(顺便说一句,我相信在上面的代码片段中使用" interface"是一种很差的技术,因为"接口"它声明包含一个成员变量;它可能应该而#34; class"相反。我对IDE的行为感到困惑,并希望有人可以向我解释。)
答案 0 :(得分:0)
微软通过电子邮件向我证实这是一个错误,但它已在Visual Studio 2015 Update 2中修复。我今天下载并安装了Update 3,实际上,该错误消失了。 Intellisense现在显示Unknwn.h中声明的宏“接口”的定义,如果单击右键单击菜单上的“goto definition”,将打开该文件。