Udostępnij za pośrednictwem


Wskazówki: tworzenie podstawowego składnika środowiska wykonawczego systemu Windows za pomocą biblioteki WRL

Ten dokument pokazuje sposób używania Biblioteka szablonów C++ środowiska wykonawczego systemu Windows (WRL) do utworzenia podstawowego Środowisko wykonawcze systemu Windows składnika.Składnik dodaje dwie liczby i wywołuje zdarzenie, gdy wynik jest zachodniej.W tym dokumencie przedstawiono także jak używać składnika z Windows Store aplikacja, która wykorzystuje JavaScript.

Wymagania wstępne

Aby utworzyć podstawowe Środowisko wykonawcze systemu Windows składnika, która dodaje dwie liczby

  1. Utwórz Visual C++ w Visual Studio, WRLClassLibrary projektu.Dokument Szablon projektu biblioteki klas WRL w tym artykule opisano sposób pobierania tego szablonu.Nazwa projektu Contoso.

  2. W Contoso.cpp i Contoso.idl należy zastąpić wszystkie wystąpienia "WinRTClass" z "Kalkulatora".

  3. W Contoso.idl, dodać Add metodę w celu ICalculator interfejsu.

    HRESULT Add([in] int a, [in] int b, [out, retval] int* value);
    
  4. W Contoso.cpp, dodać Add metodę w celu public sekcji Calculator klasy.

    HRESULT __stdcall Add(_In_ int a, _In_ int b, _Out_ int* value)
    {
        if (value == nullptr)
        {
            return E_POINTER;
        }
        *value = a + b;
        return S_OK;
    }
    
    Ważna uwagaWażne

    Ponieważ tworzysz składnika modelu COM, należy stosować __stdcall konwencji wywoływania.

    Firma Microsoft zaleca użycie _Out_ i inne źródła adnotacji języka (SAL) adnotacji do opisywania, jak funkcja wykorzystuje jego parametry.Adnotacje SAL również opisać zwracane wartości.Adnotacje SAL pracować z Narzędzie do analizy kodu C/C++ do wykrywania ewentualnych wad w C i C++ kod źródłowy.Najczęstszych błędów kodowania, które zostały zgłoszone przez narzędzie należą przepełnienia bufora, niezainicjowanej pamięci, rozstrzyga pusty wskaźnik i przecieków pamięci i zasobów.

Aby użyć składnika z Windows Store aplikacja, która wykorzystuje JavaScript

  1. W programie Visual Studio, dodawanie nowego skryptu JavaScript Puste App projekt Contoso rozwiązanie.Nazwa projektu CalculatorJS.

  2. W CalculatorJS projektu, Dodaj odwołanie do Contoso projektu.

  3. W default.html, Zastąp body sekcji z tych elementów interfejsu użytkownika:

    <div>
        <input id="a" />
        <input id="b" />
        <p id="result">Result:</p>
        <button onclick="Add()">Add</button>
    </div>
    
  4. W default.js, wdrożyć OnClick funkcji.

    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);
    }
    

    [!UWAGA]

    W języku JavaScript pierwszej litery nazwy metody ulega zmianie do małe litery, aby dopasować standardowymi konwencjami nazewnictwa.

Aby dodać wydarzenie, które działają, gdy liczba jest obliczana

  1. W Contoso.idl przed deklaracji ICalculator, zdefiniować typ delegata, PrimeNumberEvent, który zapewnia int argument.

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

    Podczas korzystania z delegate słowa kluczowego, kompilator MIDL tworzy interfejs, który zawiera Invoke metodę, która pasuje do podpisu to pełnomocnik.Wygenerowany plik Contoso_h.h definiuje w tym przykładzie IPrimeNumberEvent interfejs, który jest używany w dalszej części tej procedury.

    MIDL_INTERFACE("3FBED04F-EFA7-4D92-B04D-59BD8B1B055E")
    IPrimeNumberEvent : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Invoke( 
            int primeNumber) = 0;
    
    };
    
  2. W ICalculator interfejs, zdefiniuj PrimeNumberFound zdarzenia.eventadd i eventremove atrybuty określić, że konsumenta o ICalculator interfejsu można subskrybować i Anuluj subskrypcję tego zdarzenia.

    [eventadd]
    HRESULT PrimeNumberFound(
        [in] PrimeNumberEvent* eventHandler, 
        [out, retval] EventRegistrationToken* eventCookie);
    [eventremove] 
    HRESULT PrimeNumberFound(
        [in] EventRegistrationToken eventCookie);
    
  3. W Contoso.cpp, dodać privateMicrosoft::WRL::EventSource zmienną do obsługi subskrybentów zdarzeń i wywołać programu obsługi zdarzeń.

    EventSource<IPrimeNumberEvent> m_events;
    
  4. W Contoso.cpp, wdrożyć add_PrimeNumberFound i remove_PrimeNumberFound metody.

    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);
    }
    

Aby podnieść zdarzenie, kiedy liczba pierwsza jest obliczana.

  1. W Contoso.cpp, dodać IsPrime metodę w celu private sekcji Calculator klasy.

    // 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. Modyfikowanie Calculatorw Add metodę wywoływaną w Microsoft::WRL::EventSource::InvokeAll metod, jeżeli liczba jest obliczana.

    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;
    }
    

Do obsługi zdarzeń z kodu JavaScript

  1. W default.html, zmodyfikuj body sekcji, aby zawierać obszar tekstowy, który zawiera liczby pierwsze.

    <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. Zmodyfikuj w default.js, Add funkcja radzić sobie z PrimeNumberFound zdarzenia.Obsługa zdarzeń dołącza liczba pierwsza do obszaru tekstu, który został zdefiniowany za poprzedni krok.

    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);
    }
    

    [!UWAGA]

    W języku JavaScript nazwy zdarzenia są zmieniane na małą i są poprzedzone "on" odpowiadający standardowymi konwencjami nazewnictwa.

Na poniższej ilustracji przedstawiono podstawowe aplikacji Kalkulator.

Podstawowe aplikacji Kalkulator za pomocą kodu JavaScript

Zobacz też

Koncepcje

Biblioteka szablonów języka C++ środowiska wykonawczego systemu Windows (WRL)

Szablon projektu biblioteki klas WRL

Narzędzie do analizy kodu C/C++