#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.