Для заданной функции следующим образом:
HRESULT D3D12CreateDevice (
IUnknown * pAdapter,
D3D_FEATURE_LEVEL MinimumFeatureLevel,
Рефид рид,
void ** ppDevice
);
Собственный C ++ способ его использования:
ID3D12Device* d3d12Device;
D3D12CreateDevice(adapter, featureLevel, IID_PPV_ARGS(&d3d12Device));
Проблема в том, что я не могу использовать IID_PPV_ARGS в проекте / CLI, потому что в управляемом коде есть какой-то недоступный макрос.
Поэтому я стараюсь делать то же, что и раньше, используя DirectX 11 и C ++ CLI, следующим образом:
ID3D12Device* d3d12Device;
D3D12CreateDevice(adapter, featureLevel, __uuidof(ID3D12Device), (void**)&d3d12Device);
Это не приводит к ошибке компилятора, но создание объекта DX всегда завершается неудачей. Раньше он работал с DX 11, но больше не работал с DX12.
Кто-то может сказать мне, как я должен инициализировать объект DX12 в C ++ CLI, пожалуйста?
Большое спасибо.
РЕДАКТИРОВАТЬ 1
D3D12CreateDevice работает со следующим синтаксисом (я что-то делал не так):
ID3D12Device* d3d12Device;
D3D12CreateDevice(adapter, featureLevel, __uuidof(ID3D12Device), (void**)&d3d12Device);
Но я не могу получить правильный синтаксис для CreateCommandQueue.
HRESULT CreateCommandQueue (const D3D12_COMMAND_QUEUE_DESC * pDesc,
REFIID riid, void ** ppCommandQueue);
Этот синтаксис дает ошибку приведения:
_d3d12Device->CreateCommandQueue(&queueDesc, IID_ID3D12CommandQueue, (void**)&_commandQueue)
C2440 'cast de type': невозможно преобразовать 'cli :: interior_ptr' в 'void **'