Ошибка привязки при приведении IDXGIAdapter1 к IDXGIAdapter4 [DirectX и WinRT / C ]

#c #directx #c -winrt

#c #directx #c -winrt

Вопрос:

Я пытаюсь привести экземпляр IDXGIAdapter1 к IDXGIAdapter4 следующим образом:

 winrt::com_ptr<IDXGIAdapter1&&t; adapter;

winrt::com_ptr<IDXGIAdapter4&&t; adapter{adapters.front().as<IDXGIAdapter4&&t;()};
  

Но есть ошибка связывания:

ошибка LNK2019: неразрешенный внешний символ WINRT_GetRestrictedErrorInfo, на который ссылается функция «public: __cdecl winrt::hresult_error::hresult_error(структура winrt::hresult,структура winrt::hresult_error::from_abi_t)» (??0hresult_error@winrt @@QEAA@Uhresult@1@Ufrom_abi_t@01@@Z) ошибка LNK2019: неразрешенный внешний символ WINRT_RoOri&inateLan&ua&eException, на который ссылается функция «private: void __cdecl winrt::hresult_error::ori&inate(структура winrt::hresult,void *)» (?инициировать@hresult_error@winrt@@AEAAXUhresult@2@PEAX@Z)

Что я делаю не так?

Комментарии:

1. Могу я узнать, что это за ваши адаптеры? Можете ли вы предоставить простой образец, который можно воспроизвести для нас для тестирования?

2. Спасибо за ваш ответ! Причиной проблемы является 78-я строка codeshare.io/G6bVom И моим адаптером является nVidia 2060 RTX Super

3. Если вы пытались использовать QueryInterface (например, HRESULT hr = (adapters.front())-&&t;QueryInterface(__uuidof(IDXGIAdapter4), (void**)amp;adapter); ), может ли это сработать у вас?

4. Да, это работает. Также работает подобным образом auto hr = adapters.front()-&&t;QueryInterface(__uuidof(IDXGIAdapter4), winrt::put_abi(adapter)); . Но если я попытаюсь проверить результат, winrt::check_hresult(hr) как и в предыдущий раз, произойдет сбой. Почему компоновщику не удается разрешить внешние символы? Нужно ли мне предоставлять библиотеку или что-то еще?

5. Вы имеете в виду, что при вводе winrt::check_hresult(hr) после HRESULT hr = (adapters.front())-&&t;QueryInterface(__uuidof(IDXGIAdapter4), (void**)amp;adapter); произойдет сбой? Когда я тестировал это, оно работало хорошо, не выдавало никаких исключений.

Ответ №1:

Я решил проблему, связав библиотеку «RuntimeObject.lib». Спасибо за вашу помощь, Файванг — MSFT.