如何使用此Microsoft::WRL::ComPtr<ID3D11Device> 作为此 ID3D11Device* (C++)



如果与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.()转换为原始指针的原因。对于->[]的使用,运算符重载会处理它。有关更多详细信息,请参阅本文。

最新更新