【问题标题】:C++/CX Header file can't find Microsoft namespaceC++/CX 头文件找不到微软命名空间
【发布时间】:2019-05-31 02:14:23
【问题描述】:

我有一个包含以下代码的头文件:

  Microsoft::WRL:ComPtr<ID3D11Device2> m_device;

在类定义中。 Visual Studio 2013 说微软不是一个命名空间,如果我把代码删掉并放在另一个文件中的另一个类中,它就可以正常工作!

有什么想法吗?

菲利普

编辑:突然之间(我没有更改任何内容)Intelissense 现在接受 Microsoft::WRL::ComPtry 为有效,但当我编译时它仍然给我它不存在的错误。

【问题讨论】:

  • 你是否包含client.h 让编译器知道ComPtr 类型和命名空间?也许另一个文件已经包含它或包含包含它的东西。
  • 名为 client.h 的文件不会显示在自动完成中。此外,我粘贴到的另一个文件不包含任何其他内容,并且可以正常工作...
  • 使用 C++/CX 的关键在于您不必退回到巫毒教的低层,即龙居住的那种。您使用#include &lt;wrl\client.h&gt; 调用dragon,以便编译器可以看到命名空间和类型。如果阳光明媚,这有助于它找到 c:\Program Files (x86)\Windows Kits\8.1\Include\winrt\wrl\client.h。

标签: visual-studio-2013 directx-11 c++-cx


【解决方案1】:

你需要

#include <wrl.h>

#include <wrl/client.h>

在你的模块中获取Microsoft::WRL::ComPtr

当您说“Visual Studio 2013 说 Microsoft 不是命名空间”时,您的意思是遇到编译器错误还是只是 Intellisense?在处理标头时,Intellisense 可能会有点不同步,直到您再次构建。例如:

//Test.h
class A { Microsoft::WRL::ComPtr<T> a; };

//Test.cpp
#include <wrl/client.h>
#include "Test.h"

如果您刚刚将 #include &lt;wrl/client.h&gt; 添加到 Test.cpp,Intellisense 可能还不知道它是否在标头的范围内。它已经是完全有效的 C++,但更好的做法是在您的标题中包含它需要的那些:

//Test.h
#pragma once
#include <wrl/client.h>
class A { Microsoft::WRL::ComPtr<T> a; };

如果您正在这样做,则此同步问题的另一种表现方式是:

//Test.h
class A { Microsoft::WRL::ComPtr<T> a; };

//Test.cpp
#include "pch.h"
#include "Test.h"

//pch.h
#include <wrl/client.h>

同样,将构建的完全有效的 C++。 Intellisense 知道它在您构建时会起作用,但可能直到那时才起作用。

注意:WRL 是传统的 C++,不使用 C++/CX 语言扩展。它们的存在都是为了更容易从 C++ 中使用 WinRT API,你会看到里面使用了Microsoft::WRL::ComPtr处理 Direct3D 等非 WinRT COM API 时的 C++/CX 应用程序。您可以在同一个应用程序中混合使用 C++/CX 和 WRL,利用您可以在 C++/CX ref ^ 和 ABI COM 指针之间使用 reinterpret_cast&lt;&gt; 的事实。您也可以在 Windows 7 或 Windows Vista 上的老式 Windows 桌面应用程序中使用 Microsoft::WRL::ComPtr

话虽如此,WRL 和 C++/CX 是两个截然不同的东西。

更新:对于使用 Windows 运行时 API,您还可以使用 C++/WinRT,它也是“标准”C++,无需任何 C++/CX 扩展。见Microsoft Docs。您可以将 Microsoft::WRL::ComPtr 用于 C++/WinRT 应用程序,也可以使用它们的变体 wrl::com_ptr

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2015-08-05
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多