c++ - 如何在包含树中找到哪个 header 包含另一个 header ?

标签 c++ visual-studio compilation

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

项目最终编译运行正常,但不知道是直接还是间接包含了哪个header combaseapi.h ?

如何找到正在使用 combaseapi.h 的 header ?

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

最佳答案

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

#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 header 包含:

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 个 header 包括 combaseapi.h

我正在使用 Windows 10。

我在Microsoft documentation 中没有看到任何备注

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

关于c++ - 如何在包含树中找到哪个 header 包含另一个 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908202/

相关文章:

c++ - 函数参数列表中用于输出的参数应该在哪里

c++ - noexcept 有什么用?

c++ - 正确实现 std::sort

apache - Visual Studio 中的 Apache Cordova 更新工具

java - 使用maven编译时如何忽略.java文件?

c++ - 如果类型是在命名空间内创建的,我如何才能知道?

css - 将现有 CSS 布局转换为 IE4 友好的快速方法?

vb.net - 两个定时器同时独立运行

无法编译c代码

c++ - std::chrono 的问题