Sdílet prostřednictvím


Postupy: Přímé vytváření instancí komponent knihovny WRL

Naučte se používat Knihovna šablon C++ prostředí Windows Runtime (WRL) Microsoft::WRL::Make a Microsoft::WRL::Details::MakeAndInitialize funkce pro vytvoření instance komponenty z modulu, která jej definuje.

Vytvoření instance komponenty přímo, můžete snížit režii Pokud nepotřebujete ClassFactory nebo jiné mechanismy.Můžete vytvořit instanci komponenty v obou Windows Store aplikací a aplikací plochy.

Další informace o použití WRL Chcete-li vytvořit základní prostředí Windows Runtime komponenty a konkretizovat z externího Windows Store app, viz Postup: Vytvoření základní komponenty prostředí Windows Runtime s použitím knihovny WRL.Další informace o použití WRL vytvořit klasické komponenty COM a vytvořit instanci externí aplikaci pracovní plochy naleznete v tématu Postupy: Vytvoření klasické komponenty COM s použitím knihovny WRL.

Tento dokument obsahuje dva příklady.První příklad používá Make funkce pro vytvoření instance komponenty.V druhém příkladu MakeAndInitialize funkce pro vytvoření instance komponenty, který může selhat při konstrukci. (Protože obvykle používá COM HRESULT , místo hodnoty výjimky k označení chyby, typ COM obvykle nevyvolá ze svého konstruktoru.MakeAndInitializekomponenta k ověření přes argumenty konstrukce umožňuje RuntimeClassInitialize metody.) Oba příklady definovat základní protokolování rozhraní a implementovat toto rozhraní definuje třídu, která zapisuje zprávy do konzoly.

Důležitá poznámkaDůležité

Nelze použít new operátor, chcete-li vytvořit instanci WRL komponenty.Proto doporučujeme, abyste vždy používali Make nebo MakeAndInitialize přímo vytvořit instanci komponenty.

Vytvoření a vytvoření instance komponenty základní protokoly

  1. V aplikaci Visual Studio vytvořte Aplikace konzoly Win32 projektu.Název projektu, například WRLLogger.

  2. Přidat Soubor Midl (.) soubor do projektu, zadejte název souboru ILogger.idla pak přidejte tento kód:

    import "ocidl.idl";
    
    // Prints text to the console.
    [uuid(AFDB9683-F18A-4B85-90D1-B6158DAFA46C)]
    interface ILogger : IUnknown
    {
        HRESULT Log([in] LPCWSTR text);
    }
    
  3. Chcete-li nahradit obsah WRLLogger.cpp použijte následující kód.

    #include "stdafx.h"
    #include <wrl\implements.h>
    #include <comutil.h>
    
    #include "ILogger_h.h" 
    
    using namespace Microsoft::WRL;
    
    // Writes logging messages to the console. 
    class CConsoleWriter : public RuntimeClass<RuntimeClassFlags<ClassicCom>, ILogger>
    {
    public:
        STDMETHODIMP Log(_In_ PCWSTR text)
        {
            wprintf_s(L"%s\n", text);
            return S_OK;
        }
    
    private:
        // Make destroyable only through Release.
        ~CConsoleWriter()
        {
        }
    };
    
    int wmain()
    {
        ComPtr<CConsoleWriter> writer = Make<CConsoleWriter>();
        HRESULT hr = writer->Log(L"Logger ready.");
        return hr;
    }
    
    /* Output:
    Logger ready.
    */
    

Zpracování selhání konstrukce protokolovací nástroj základní součásti

  1. Následující kód použít k nahrazení definice CConsoleWriter třídy.Tato verze obsahuje soukromý řetězec členské proměnné a lokální změny RuntimeClass::RuntimeClassInitialize metody.RuntimeClassInitializePokud se nezdaří volání SHStrDup se nezdaří.

    // Writes logging messages to the console. 
    class CConsoleWriter : public RuntimeClass<RuntimeClassFlags<ClassicCom>, ILogger>
    {
    public:
        // Initializes the CConsoleWriter object. 
        // Failure here causes your object to fail construction with the HRESULT you choose.
        HRESULT RuntimeClassInitialize(_In_ PCWSTR category)
        {
            return SHStrDup(category, &m_category);
        }
    
        STDMETHODIMP Log(_In_ PCWSTR text)
        {
            wprintf_s(L"%s: %s\n", m_category, text);
            return S_OK;
        }
    
    private:
        PWSTR m_category;
    
        // Make destroyable only through Release.
        ~CConsoleWriter()
        {
            CoTaskMemFree(m_category);
        }
    };
    
  2. Následující kód použít k nahrazení definice wmain.Tato verze používá MakeAndInitialize k vytvoření instance CConsoleWriter objekt a kontroly HRESULT výsledek.

    int wmain()
    {
        ComPtr<CConsoleWriter> writer;
        HRESULT hr = MakeAndInitialize<CConsoleWriter>(&writer, L"INFO");
        if (FAILED(hr))
        {
            wprintf_s(L"Object creation failed. Result = 0x%x", hr);
            return hr;
        }
        hr = writer->Log(L"Logger ready.");
        return hr;
    }
    
    /* Output:
    INFO: Logger ready.
    */
    

Viz také

Referenční dokumentace

Microsoft::WRL::Make

Microsoft::WRL::Details::MakeAndInitialize

Koncepty

Knihovna šablon C++ prostředí Windows Runtime (WRL)