Функция winrt::get_unknown (C++/WinRT)
Вспомогающая функция, возвращающая адрес (другими словами, указатель на) базовый необработанный интерфейс IUnknown объекта проецируемого типа (сведения о проецируемых типах см. в разделе "Использование API с помощью C++/WinRT").
Эта функция помогает вызывать методы (например, методы COM), которые ожидают указатель на ::IUnknown. Дополнительные сведения см. в разделе "Пример " в этом разделе. См. также структуру winrt::Windows::Foundation::IUnknown.
Мы рекомендуем явно указывать #include <unknwn.h>
при использовании winrt::get_unknown, даже если такой заголовок был включен другим заголовком.
Синтаксис
inline ::IUnknown* get_unknown(winrt::Windows::Foundation::IUnknown const& object) noexcept;
Параметры
object
Объект проецируемого типа для работы (или любого значения winrt::Windows::Foundation::IUnknown).
Возвращаемое значение
Адрес базового необработанного интерфейса IUnknown в качестве указателя на IUnknown.
Пример
#include <dxgi1_2.h>
#include <d3d12.h>
#include <unknwn.h>
#include <winrt/Windows.UI.Core.h>
...
winrt::com_ptr<::IDXGIFactory2> factory;
winrt::com_ptr<::ID3D12CommandQueue> commandQueue;
winrt::Windows::UI::Core::CoreWindow coreWindow{ nullptr };
DXGI_SWAP_CHAIN_DESC1 swapChainDesc{};
winrt::com_ptr<::IDXGISwapChain1> swapChain;
// Initialize the variables here.
winrt::check_hresult(
factory->CreateSwapChainForCoreWindow(
commandQueue.get(),
winrt::get_unknown(coreWindow),
&swapChainDesc,
nullptr,
swapChain.put())
);
Функция get_unknown не предназначена для случаев, когда вы создаете тип, реализующий COM-интерфейс, но не реализует тип среда выполнения Windows. В таком случае можно передать указатель на тип везде, где ожидается ::IUnknown , как показано ниже.
HRESULT FunctionThatExpectsAnIUnknown(::IUnknown * pUnk);
...
struct MyRuntimeClass : winrt::implements<MyRuntimeClass, IMyCOMInterface>
{
...
HRESULT MyRuntimeClass::MemberFunction()
{
return FunctionThatExpectsAnIUnknown(this);
}
}
Дополнительные сведения см. в статье Создание API-интерфейсов в C++/WinRT.
Требования
Минимальный поддерживаемый пакет SDK: пакет SDK Windows версии 10.0.17134.0 (Windows 10 версии 1803)
Пространство имен: winrt
Заголовок: %WindowsSdkDir%IncludeWindowsTargetPlatformVersion<>\cppwinrt\winrt\base.h (включен по умолчанию)