Sdílet prostřednictvím


Návod – Jak vytvořit komponentu C#/WinRT a použít ji v C++/WinRT

C#/WinRT umožňuje vývojářům, kteří používají .NET, vytvářet vlastní komponenty prostředí Windows Runtime v jazyce C# pomocí projektu knihovny tříd. Vytvořené komponenty je možné využívat v nativních desktopových aplikacích jako odkaz na balíček nebo jako odkaz na projekt s několika úpravami.

Tento názorný postup ukazuje, jak vytvořit jednoduchou komponentu prostředí Windows Runtime pomocí C#/WinRT, distribuovat komponentu jako balíček NuGet a využívat ji z konzolové aplikace C++/WinRT. Úplnou ukázku, která obsahuje kód pro tento článek, najdete v ukázce vytváření obsahu C#/WinRT. Další podrobnosti o vytváření najdete v tématu Vytváření komponent.

Návod k vytváření ovládacích prvků WinUI pomocí jazyka C#/WinRT speciálně pro použití v aplikacích windows App SDK najdete v článku Návod: Vytvoření komponenty jazyka C# s ovládacími prvky WinUI 3 a využití z aplikace windows App SDK jazyka C++

Požadavky

Tento názorný postup vyžaduje následující nástroje a komponenty:

Vytvoření jednoduché komponenty prostředí Windows Runtime pomocí C#/WinRT

Začněte vytvořením nového projektu v sadě Visual Studio. Vyberte šablonu projektu knihovny tříd a pojmenujte projekt AuthoringDemo. V projektu budete muset provést následující doplňky a úpravy:

  1. TargetFramework Aktualizujte soubor AuthoringDemo.csproj a přidejte do souboru PropertyGroup:

    <PropertyGroup>
        <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
        <Platforms>x64</Platforms>
    </PropertyGroup>
    

    Pokud chcete získat přístup k typům prostředí Windows Runtime, musíte v TFM nastavit konkrétní verzi sady Windows SDK. Další podrobnosti o podporované verzi najdete viz .NET 6 a novější: Použijte možnost TFM.

  2. Nainstalujte do projektu balíček NuGet Microsoft.Windows.CsWinRT.

    a. V Průzkumníku řešení klikněte pravým tlačítkem na uzel projektu a vyberte Spravovat balíčky NuGet.

    b) Vyhledejte balíček NuGet Microsoft.Windows.CsWinRT a nainstalujte nejnovější verzi. Tento průvodce používá C#/WinRT verze 1.4.1.

  3. Přidejte nový PropertyGroup prvek, který nastaví CsWinRTComponent vlastnost. Určuje, že projekt je komponenta prostředí Windows Runtime, .winmd aby se při sestavování projektu vygeneroval soubor.

    <PropertyGroup>   
        <CsWinRTComponent>true</CsWinRTComponent>
    </PropertyGroup>
    

    Úplný seznam vlastností projektu C#/ WinRT najdete v dokumentaci NuGet jazyka C#/WinRT.

  4. Třídy modulu runtime můžete vytvářet pomocí knihovny .cs souborů tříd. Klikněte pravým tlačítkem myši na Class1.cs soubor a přejmenujte ho na Example.cs. Do tohoto souboru přidejte následující kód, který přidá veřejnou vlastnost a metodu do třídy runtime. Nezapomeňte označit všechny třídy, které chcete vystavit v komponentě runtime jako public.

    namespace AuthoringDemo
    {
        public sealed class Example
        {
            public int SampleProperty { get; set; }
    
            public static string SayHello()
            {
                return "Hello from your C# WinRT component";
            }
        }
    }
    
  5. Teď můžete vytvořit projekt, který vygeneruje soubor pro vaši komponentu .winmd . Klikněte pravým tlačítkem myši na projekt v Průzkumník řešenía poté klikněte na Sestavit. Vygenerovaný AuthoringDemo.winmd soubor se zobrazí ve výstupní složce sestavení.

Vygenerování balíčku NuGet pro komponentu

Většina vývojářů bude chtít distribuovat a sdílet komponentu prostředí Windows Runtime jako balíček NuGet. Další možností je využívat komponentu jako odkaz na projekt. Následující kroky ukazují, jak zabalit komponentu AuthoringDemo . Když balíček vygenerujete, C#/WinRT nakonfiguruje komponentu a hostování sestavení v balíčku tak, aby povolovala spotřebu z nativních aplikací.

Balíček NuGet můžete vygenerovat několika způsoby:

  • Pokud chcete vygenerovat balíček NuGet při každém sestavení projektu, přidejte do souboru projektu AuthoringDemo následující vlastnost a pak projekt znovu sestavte.

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • Případně můžete vygenerovat balíček NuGet tak, že v Průzkumníku řešení kliknete pravým tlačítkem na projekt AuthoringDemo a vyberete Balíček.

Při sestavování balíčku by mělo okno Sestavení indikovat, že se balíček AuthoringDemo.1.0.0.nupkg NuGet úspěšně vytvořil. Další podrobnosti o vlastnostech balíčku NuGet pomocí rozhraní příkazového řádku dotnet najdete v tématu Vytvoření balíčku pomocí rozhraní příkazového řádku .NET.

Používání komponenty ve aplikaci C++/WinRT

C#/WinRT vytvořené komponenty prostředí Windows Runtime je možné využívat z libovolného jazyka kompatibilního s prostředím Windows Runtime (WinRT). Následující kroky ukazují, jak volat výše vytvořené komponenty v konzolové aplikaci C++/WinRT.

Poznámka:

Použití komponenty C#/WinRT z aplikací C#/.NET je podporováno odkazem na balíček nebo odkazem na projekt. Tento scénář je ekvivalentem využívání jakékoli běžné knihovny tříd jazyka C# a ve většině případů nezahrnuje aktivaci WinRT. Od verze C#/WinRT 1.3.5 vyžadují odkazy na projekty uživatelů jazyka C# .NET 6.

  1. Přidejte do svého řešení nový projekt konzolové aplikace C++/WinRT . Všimněte si, že tento projekt může být také součástí jiného řešení, pokud to zvolíte.

    a. V průzkumníku řešení klikněte pravým tlačítkem na uzel řešení a klikněte na Přidat –>Nový projekt.

    b) V dialogovém okně Přidat nový projekt vyhledejte šablonu projektu konzolové aplikace C++/WinRT . Vyberte šablonu a klikněte na Další.

    c) Pojmenujte nový projekt CppConsoleApp a klikněte na Vytvořit.

  2. Přidejte odkaz na komponentu AuthoringDemo, buď jako balíček NuGet, nebo odkaz na projekt.

    • Možnost 1 (odkaz na balíček)::

      a. Klikněte pravým tlačítkem na projekt CppConsoleApp a vyberte Spravovat balíčky NuGet. Možná budete muset nakonfigurovat zdroje balíčků tak, aby přidaly odkaz na balíček AuthoringDemo NuGet. Uděláte to tak, že kliknete na ikonu Nastavení ve Správci balíčků NuGet a přidáte zdroj balíčku do příslušné cesty.

      Nastavení NuGet

      b) Po nakonfigurování zdrojů balíčků vyhledejte balíček AuthoringDemo a klikněte na Nainstalovat.

      Instalace balíčku NuGet

    • Možnost 2 (odkaz na projekt)::

      a. Klikněte pravým tlačítkem na projekt CppConsoleApp a vyberte Přidat –>Referenční. Pod uzlem Projekty přidejte odkaz na projekt AuthoringDemo .

  3. Chcete-li hostovat komponentu, budete muset přidat soubor manifestu pro aktivaci registrace tříd. Další podrobnosti o hostování spravovaných komponent najdete v tématu Hostování spravovaných komponent.

    a. Pokud chcete přidat soubor manifestu, znovu klikněte pravým tlačítkem na projekt a zvolte Přidat –> nová položka. Vyhledejte šablonu textového souboru a pojmenujte ji CppConsoleApp.exe.manifest. Vložte následující obsah, který určuje třídy runtime pomocí aktivovatelných položek registrace třídy:

    <?xml version="1.0" encoding="utf-8"?>
    <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
        <assemblyIdentity version="1.0.0.0" name="CppConsoleApp"/>
        <file name="WinRT.Host.dll">
            <activatableClass
                name="AuthoringDemo.Example"
                threadingModel="both"
                xmlns="urn:schemas-microsoft-com:winrt.v1" />
        </file>
    </assembly>
    

    Soubor manifestu aplikace se vyžaduje pro aplikace, které nejsou zabalené. Pro zabalené aplikace musí spotřebitel aplikace zaregistrovat aktivovatelné třídy v souboru manifestu balíčku Package.appxmanifest, jak je vysvětleno v Průvodce: Vytvoření komponenty jazyka C# s ovládacími prvky WinUI 3 a jejich použití v aplikaci C++ Windows App SDK.

    b) Při nasazování projektu upravte projekt tak, aby zahrnoval soubor manifestu ve výstupu. Klikněte na CppConsoleApp.exe.manifest soubor v Průzkumníku řešení a nastavte vlastnost Content na True. Tady je příklad, jak to vypadá.

    nasazení obsahu

  4. Otevřete soubor pch.h pod hlavičkovým souborem projektu a přidejte následující řádek kódu, který bude obsahovat vaši komponentu.

    #include <winrt/AuthoringDemo.h>
    
  5. Otevřete main.cpp pod zdrojovými soubory projektu a nahraďte ho následujícím obsahem.

    #include "pch.h"
    #include "iostream"
    
    using namespace winrt;
    using namespace Windows::Foundation;
    
    int main()
    {
        init_apartment();
    
        AuthoringDemo::Example ex;
        ex.SampleProperty(42);
        std::wcout << ex.SampleProperty() << std::endl;
        std::wcout << ex.SayHello().c_str() << std::endl;
    }
    
  6. Sestavte a spusťte projekt CppConsoleApp . Teď byste měli vidět následující výstup.

    Výstup konzoly C++/WinRT