Как использовать указатель Direct3D 11, завернутый в ComPtr, чтобы получить интерфейс 11.1?
Я следую учебникам, и я преобразовал обычную инициализацию в использование ComPtrs до этой строки:
ID3D11Device* g_pd3dDevice = nullptr;
ID3D11Device1* g_pd3dDevice1 = nullptr;
// Obtain the Direct3D 11.1 versions if available
hr = g_pd3dDevice->QueryInterface( __uuidof( ID3D11Device1 ), reinterpret_cast<void**>( &g_pd3dDevice1 ) );
вот что я ожидал, чтобы быть прямым аналогом:
Microsoft::WRL::ComPtr<ID3D11Device> device = nullptr;
Microsoft::WRL::ComPtr<ID3D11Device1> device1 = nullptr;
// Obtain the Direct3D 11.1 versions if available
hr = device->QueryInterface(__uuidof(ID3D11Device1), reinterpret_cast<ID3D11Device1**>(&device1));
существует ряд предупреждений компилятора и Intellisense (действительно загадочных для меня). Ему не нравится приведение, и ему не нравится, как я использую QueryInterface().
что я должен делать?
ошибки:
Error 1 error C2440: 'reinterpret_cast' : cannot convert from 'Microsoft::WRL::Details::ComPtrRef<Microsoft::WRL::ComPtr<ID3D11Device1>>' to 'ID3D11Device1 **'
Error 2 error C2660: 'Microsoft::WRL::Details::RemoveIUnknownBase<T>::QueryInterface' : function does not take 1 arguments
предупреждения Intellisense (может быть полезным?):
18 IntelliSense: function "Microsoft::WRL::Details::RemoveIUnknownBase<T>::QueryInterface [with T=ID3D11Device]" (declared at line 64 of "C:Program Files (x86)Windows Kits.1Includewinrtwrl/client.h") is inaccessible
1 ответов
при использовании ComPtr
, вы должны использовать ::As
вместо QueryInterface
. Например, hr = device.As(&device1);