如何找到包含树中包含另一个标头的标头?

时间:2018-04-18 20:07:11

标签: c++ visual-studio compilation

在Microsoft DirectX示例的D3D12HelloWindow project中,引用了IID_PPV_ARGS。当我在VS2017企业中使用F12导航时,我到达combaseapi.h,但是/showincludes编译器的输出根本没有引用它。

最后,项目编译并正确运行,但我不知道直接或间接包含哪个标题combaseapi.h

如何找到使用combaseapi.h的标头?

目标/问题是了解某个实现(某个DirectX 12方面),所以我可以用它来丰富我自己(在这种情况下是一个DirectX 12 WPF资产)。

1 个答案:

答案 0 :(得分:1)

我自己创造了一个非常小的例子。它不起作用,但成功编译:

#include "stdafx.h"
#include "Objbase.h"
#include "Unknwn.h"
#include "Propsys.h"

int main()
{
    IPropertyStore *pPropertyStore;

    CoCreateInstance(IID_IUnknown, NULL, CLSCTX_INPROC_SERVER,
        IID_PPV_ARGS(&pPropertyStore));

    return 0;
}

在Visual Studio 2017中,我看到combaseapi.h标题中包含Objbase.h

1>Note: including file: C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\Objbase.h
1>Note: including file:  C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared\winapifamily.h
1>Note: including file:   C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared\winpackagefamily.h
1>Note: including file:  C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared\rpc.h
...
1>Note: including file:    C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\ole2.h
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared\pshpack8.h
1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\objbase.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared\pshpack8.h
1>Note: including file:      C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\combaseapi.h
...

以上编译器输出应按以下方式读取。如果下面的行有更多缩进,则意味着上面一行中的标题包含来自下一行的标题。我包含#include "Objbase.h"并在我的.cpp文件中进行增加缩进,我看到combaseapi.h(输出附加部分的最后一行)。据我所知,Objbase.h到5个标题包括combaseapi.h

我使用的是Windows 10.

我在Microsoft documentation

中看不到任何评论

也许尝试再次检查调试器输出?