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
Více se dozvíte v tématu o Windows Runtime.
Použití COM komponent.
Vytvoření základní komponenty prostředí Windows Runtime sčítající dvě čísla
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.
V souborech Contoso.cpp a Contoso.idl přepište všechny instance třídy "WinRTClass" na "Calculator".
V souboru Contoso.idl přidejte do rozhraní ICalculator metodu Add.
HRESULT Add([in] int a, [in] int b, [out, retval] int* value);
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é 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
V systému Visual Studio přidejte do řešení Contoso nový projekt jazyka JavaScript Prázdná aplikace.Projekt pojmenujte CalculatorJS.
V projektu CalculatorJS přidejte odkaz na projekt Contoso.
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>
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
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; };
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);
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;
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
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; }
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
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>
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.
Viz také
Koncepty
Knihovna šablon C++ prostředí Windows Runtime (WRL)