Sdílet prostřednictvím


Postup: Vytvoření základní komponenty prostředí Windows Runtime s použitím knihovny WRL

Tento dokument ukazuje, jak použít Knihovna šablon C++ prostředí Windows Runtime (WRL) pro vytvoření základní komponenty prostředí Windows Runtime.Komponenta sečte dvě čísla a vyvolá událost, pokud je výsledkem primární číslo.Tento dokument také ukazuje, jak používat komponenty z aplikací Windows Store, které používají jazyk JavaScript.

Požadavky

Vytvoření základní komponenty prostředí Windows Runtime sčítající dvě čísla

  1. V systému Visual Studio vytvořte projekt jazyka Visual C++ WRLClassLibrary.Dokument Šablona projektu knihovny tříd WRL popisuje, jak tuto šablonu stáhnout.Projekt pojmenujte Contoso.

  2. V souborech Contoso.cpp a Contoso.idl přepište všechny instance třídy "WinRTClass" na "Calculator".

  3. V souboru Contoso.idl přidejte do rozhraní ICalculator metodu Add.

    HRESULT Add([in] int a, [in] int b, [out, retval] int* value);
    
  4. V souboru Contoso.cpp přidejte do části public třídy Calculator metodu Add.

    HRESULT __stdcall Add(_In_ int a, _In_ int b, _Out_ int* value)
    {
        if (value == nullptr)
        {
            return E_POINTER;
        }
        *value = a + b;
        return S_OK;
    }
    
    Důležitá poznámkaDůležité

    Jelikož vytváříte COM komponentu, nezapomeňte použít konvenci volání __stdcall.

    Pro popis toho, jak funkce pracují s parametry, doporučujeme použít _Out_ nebo další anotace jazyka anotace zdroje (SAL).Anotace SAL rovněž popisují návratové hodnoty.Pro vyhledání možných chyb ve zdrojovém kódu v jazycích C a C++ pracují anotace SAL společně s Nástrojem pro analýzu kódu v jazyce C/C++.Mezi běžné chyby kódování hlášené pomocí tohoto nástroje patří chyby přetečení vyrovnávací paměti, neinicializovaná paměť, přístup přes ukazatel null a absence uvolnění zdrojů.

Použití komponenty z Windows Store aplikace, která používá jazyk JavaScript

  1. V systému Visual Studio přidejte do řešení Contoso nový projekt jazyka JavaScript Prázdná aplikace.Projekt pojmenujte CalculatorJS.

  2. V projektu CalculatorJS přidejte odkaz na projekt Contoso.

  3. V souboru default.html nahraďte oddíl body oddíl následujícími prvky uživatelského rozhraní:

    <div>
        <input id="a" />
        <input id="b" />
        <p id="result">Result:</p>
        <button onclick="Add()">Add</button>
    </div>
    
  4. V souboru default.js implementujte funkci OnClick.

    function Add() {
        "use strict";
    
        var calculator = new Contoso.Calculator();
    
        var a = document.getElementById("a");
        var b = document.getElementById("b");
    
        document.getElementById("result").innerHTML = "Result: " + calculator.add(a.value, b.value);
    }
    

    [!POZNÁMKA]

    V jazyce JavaScript se změní první písmeno názvu metody na malé písmeno tak, aby odpovídalo standardní konvenci pojmenování.

Přidání události, která se spustí po výpočtu prvočísla

  1. V souboru Contoso.idl před deklarací ICalculator definujte typ delegáta PrimeNumberEvent, který poskytuje argument int.

    [uuid(3FBED04F-EFA7-4D92-B04D-59BD8B1B055E), version(COMPONENT_VERSION)]
    delegate HRESULT PrimeNumberEvent(int primeNumber);
    

    Při použití klíčového slova delegate vytvoří MIDL kompilátor rozhraní, které obsahuje metodu Invoke, která odpovídá podpisu tohoto delegáta.V tomto příkladu vygenerovaný soubor Contoso_h.h definuje rozhraní IPrimeNumberEvent, které je použito později v tomto návodu.

    MIDL_INTERFACE("3FBED04F-EFA7-4D92-B04D-59BD8B1B055E")
    IPrimeNumberEvent : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Invoke( 
            int primeNumber) = 0;
    
    };
    
  2. V rozhraní ICalculator definujte událost PrimeNumberFound.Atributy eventadd a eventremove určují, že se oba konzumenti rozhraní ICalculator mohou přihlásit i odhlásit k odběru této události.

    [eventadd]
    HRESULT PrimeNumberFound(
        [in] PrimeNumberEvent* eventHandler, 
        [out, retval] EventRegistrationToken* eventCookie);
    [eventremove] 
    HRESULT PrimeNumberFound(
        [in] EventRegistrationToken eventCookie);
    
  3. Do souboru Contoso.cpp přidejte pro správu odběratelů události a vyvolání obslužné rutiny události členskou proměnnou privateMicrosoft::WRL::EventSource.

    EventSource<IPrimeNumberEvent> m_events;
    
  4. V souboru Contoso.cpp implementujte metody add_PrimeNumberFound a remove_PrimeNumberFound.

    HRESULT __stdcall add_PrimeNumberFound(_In_ IPrimeNumberEvent* event, _Out_ EventRegistrationToken* eventCookie)
    {
        return m_events.Add(event, eventCookie);
    }
    
    HRESULT __stdcall remove_PrimeNumberFound(_In_ EventRegistrationToken eventCookie)
    {
        return m_events.Remove(eventCookie);
    }
    

Vyvolání události po výpočtu prvočísla

  1. V souboru Contoso.cpp, přidejte do části private třídy Calculator metodu IsPrime.

    // Determines whether the input value is prime. 
    bool IsPrime(int n)
    {
        if (n < 2)
        {
            return false;
        }
        for (int i = 2; i < n; ++i)
        {
            if ((n % i) == 0)
            {
                return false;
            }
        }
        return true;
    }
    
  2. Upravte metodu Add třídy Calculator tak, aby volala metodu Microsoft::WRL::EventSource::InvokeAll, když bude vypočteno prvočíslo.

    HRESULT __stdcall Add(_In_ int a, _In_ int b, _Out_ int* value)
    {
        if (value == nullptr)
        {
            return E_POINTER;
        }
        int c = a + b;
        if (IsPrime(c))
        {
            m_events.InvokeAll(c);
        }
        *value = c;
        return S_OK;
    }
    

Zpracování události z kódu jazyka JavaScript

  1. V souboru default.html změňte část body tak, aby obsahovala text s prvočísly.

    <div>
        <input id="a" />
        <input id="b" />
        <p id="result">Result:</p>
        <p id="primes" style="color:#808080">Primes found:</p>
        <button onclick="Add()">Add</button>
    </div>
    
  2. V souboru default.js změňte funkci Add tak, aby zpracovávala událost PrimeNumberFound.Obslužná rutina události připojí prvočíslo do části textu, který byl definován v předchozím kroku.

    function Add() {
        "use strict";
    
        var calculator = new Contoso.Calculator();
        calculator.onprimenumberfound = function (ev) {
            document.getElementById("primes").innerHTML += " " + ev.target;
        };
    
        var a = document.getElementById("a");
        var b = document.getElementById("b");
    
        document.getElementById("result").innerHTML = "Result: " + calculator.add(a.value, b.value);
    }
    

    [!POZNÁMKA]

    V jazyce JavaScript jsou názvy událostí změněny na malé a je jim přidána předpona "on" tak, aby odpovídaly standardní konvenci pojmenování.

Následující ilustrace ukazuje základní aplikaci Kalkulačka.

Základní Kalkulačka aplikace v jazyce JavaScript

Viz také

Koncepty

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

Šablona projektu knihovny tříd WRL

Nástroj pro analýzu kódu v jazyce C/C++