如果与DirectX 11相关,我使用的代码是C++。
我正在使用别人教我使用的代码。问题是调用我的图形方法的类有:
Microsoft::WRL::ComPtr<ID3D11Device>
不过,这对我的一些方法不起作用。他们采取:
ID3D11Device*
要将Microsoft::WRL::ComPtr<T>
转换为T*
指针,请使用Get方法。
using Microsoft::WRL::ComPtr;
ComPtr<ID3D11Device> device;
hr = D3D11CreateDevice( ..., device.GetAddressOf(), ... );
if (FAILED(hr))
// error
...
SomeFunction(device.Get());
查看此wiki和Microsoft文档。
一些较旧的COM智能指针通过运算符自动转换为
T*
,但这实际上是一种有问题的行为,这就是为什么像std::unique_ptr<>
这样的C++标准智能指针使用get.()
转换为原始指针的原因。对于->
或[]
的使用,运算符重载会处理它。有关更多详细信息,请参阅本文。