Поделиться через


Функция 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 (включен по умолчанию)

См. также раздел