Cap*_*ard 0 directx-11 c++-cx visual-studio-2013
我有一个带有以下代码的头文件:
Microsoft::WRL:ComPtr<ID3D11Device2> m_device;
Run Code Online (Sandbox Code Playgroud)
在类定义中。Visual Studio 2013表示Microsoft不是名称空间,如果我将代码剪切并切下,然后将其放在另一个文件的另一个类中,则保持不变就可以了!
有任何想法吗?
菲利浦
编辑:突然之间(无需我进行任何更改)Intelissense现在接受Microsoft :: WRL :: ComPtry为有效,但是在我编译时它仍然给我错误,提示它不存在。
你需要
#include <wrl.h>
Run Code Online (Sandbox Code Playgroud)
要么
#include <wrl/client.h>
Run Code Online (Sandbox Code Playgroud)
进入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"
Run Code Online (Sandbox Code Playgroud)
如果您只是将它添加#include <wrl/client.h>
到Test.cpp中,则Intellisense可能还不知道它在标头的范围内。它已经完全是C ++了,但是更好的做法是在标头中包含所需的标头,例如:
//Test.h
#pragma once
#include <wrl/client.h>
class A { Microsoft::WRL::ComPtr<T> a; };
Run Code Online (Sandbox Code Playgroud)
此同步问题可以显示的另一种方式是:
//Test.h
class A { Microsoft::WRL::ComPtr<T> a; };
//Test.cpp
#include "pch.h"
#include "Test.h"
//pch.h
#include <wrl/client.h>
Run Code Online (Sandbox Code Playgroud)
同样,将构建完全有效的C ++。Intellisense知道在您构建时它会起作用,但直到那时才可能起作用。
注意:WRL是传统的C ++,并且未使用C ++ / CX语言扩展。它们都存在,以便更轻松地从C ++使用WinRT API,并且Microsoft::WRL::ComPtr
在处理非WinRT COM API(如Direct3D)时,您会在C ++ / CX应用程序中看到它们的用法。而且,您可以利用reinterpret_cast<>
C ++ / CX ref ^和ABI COM指针之间使用的事实,将C ++ / CX与WRL混合在同一应用程序中。您也可以Microsoft::WRL::ComPtr
在Windows 7或Windows Vista的老式Windows桌面应用程序中使用。
综上所述,WRL和C ++ / CX是两件截然不同的事情。
更新:为了使用Windows运行时API,您还可以使用C ++ / WinRT,它也是“标准” C ++,而无需C ++ / CX扩展。请参阅Microsoft Docs。您可以将其Microsoft::WRL::ComPtr
用于C ++ / WinRT应用程序,也可以使用其变体wrl::com_ptr
归档时间: |
|
查看次数: |
2295 次 |
最近记录: |