Delen via


Walkthrough: een C#/WinRT-onderdeel maken en gebruiken vanuit C++/WinRT

Met C#/WinRT kunnen ontwikkelaars met behulp van .NET hun eigen Windows Runtime onderdelen in C# maken met behulp van een klassebibliotheek project. Gemaakte componenten kunnen worden gebruikt in systeemeigen desktopapplicaties als pakketreferentie of als projectreferentie door enkele wijzigingen.

In dit scenario ziet u hoe u een eenvoudig Windows Runtime-onderdeel maakt met behulp van C#/WinRT, het onderdeel distribueert als een NuGet-pakket en het onderdeel gebruikt vanuit een C++/WinRT-consoletoepassing. Zie het C#/WinRT-ontwerpvoorbeeld voor het volledige voorbeeld met de code voor dit artikel. Zie Authoring components voor meer informatie over het creëren van inhoud.

Raadpleeg het artikel Walkthrough: Een C#-onderdeel maken met WinUI-besturingselementen en gebruiken vanuit een C++-Windows App SDK-toepassing voor een stapsgewijze handleiding over het maken van WinUI 3-besturingselementen met C#/WinRT specifiek voor gebruik in Windows App SDK-applicaties.

Vereiste voorwaarden

Voor deze uitwerking zijn de volgende hulpmiddelen en onderdelen vereist:

Een eenvoudig Windows Runtime-onderdeel maken met C#/WinRT

Begin met het maken van een nieuwe project in Visual Studio. Selecteer de sjabloon Class Library project en geef de naam project AuthoringDemo. U moet de volgende toevoegingen en wijzigingen aanbrengen in de project:

  1. Werk de TargetFramework bij in het bestand AuthoringDemo.csproj en voeg de volgende elementen toe aan de PropertyGroup:

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

    Als u toegang wilt krijgen tot Windows Runtime-typen, moet u een specifieke Windows SDK-versie instellen in de TFM. Zie .NET 6 en hoger voor meer informatie over de ondersteunde versie: Gebruik de TFM-optie.

  2. Installeer het Microsoft.Windows.CsWinRT NuGet-pakket in uw project.

    a. Klik in Solution Explorer met de rechtermuisknop op het project knooppunt en selecteer Manage NuGet-pakketten.

    b. Zoek naar het NuGet-pakket Microsoft.Windows.CsWinRT en installeer de nieuwste versie. In deze handleiding wordt C#/WinRT versie 1.4.1 gebruikt.

  3. Voeg een nieuw PropertyGroup element toe waarmee de CsWinRTComponent eigenschap wordt ingesteld. Hiermee geeft u op dat uw project een Windows Runtime onderdeel is, zodat er een .winmd-bestand wordt gegenereerd wanneer u de project maakt.

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

    Raadpleeg de C#/WinRT NuGet-documentatie.

  4. U kunt uw runtimeklassen ontwerpen met bibliotheekklassebestanden .cs . Klik met de rechtermuisknop op het Class1.cs bestand en wijzig de naam ervan in Example.cs. Voeg de volgende code toe aan dit bestand, waarmee een openbare eigenschap en methode worden toegevoegd aan de runtimeklasse. Vergeet niet om alle klassen te markeren die u wilt weergeven in het runtime-onderdeel als public.

    namespace AuthoringDemo
    {
        public sealed class Example
        {
            public int SampleProperty { get; set; }
    
            public static string SayHello()
            {
                return "Hello from your C# WinRT component";
            }
        }
    }
    
  5. U kunt het project nu bouwen om het .winmd bestand voor uw onderdeel te genereren. Klik met de rechtermuisknop op de project in Solution Explorer en klik op Build. U ziet het gegenereerde AuthoringDemo.winmd bestand in de uitvoermap van de build.

Een NuGet-pakket genereren voor het onderdeel

De meeste ontwikkelaars willen hun Windows Runtime onderdeel distribueren en delen als een NuGet-pakket. Een andere optie is om het onderdeel als projectverwijzing te gebruiken. De volgende stappen laten zien hoe u het authoringDemo-onderdeel inpakt. Wanneer u het pakket genereert, configureert C#/WinRT de component- en hostassemblies in het pakket om gebruik door native toepassingen mogelijk te maken.

Er zijn verschillende manieren om het NuGet-pakket te genereren:

  • Als u telkens wanneer u de project bouwt een NuGet-pakket wilt genereren, voegt u de volgende eigenschap toe aan het bestand AuthoringDemo project en bouwt u de project opnieuw.

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • U kunt ook een NuGet-pakket genereren door met de rechtermuisknop op de AuthoringDemo project te klikken in Solution Explorer en Pack te selecteren.

Wanneer u het pakket bouwt, moet in het venster Build worden aangegeven dat het NuGet-pakket AuthoringDemo.1.0.0.nupkg is gemaakt. Zie Maak een pakket met behulp van de dotnet CLI voor meer informatie over NuGet-pakketeigenschappen met de .NET CLI.

Het onderdeel gebruiken vanuit een C++/WinRT-app

C#/WinRT geschreven Windows Runtime onderdelen kunnen worden gebruikt vanuit elke Windows Runtime (WinRT)-compatibele taal. De volgende stappen laten zien hoe u het hierboven geschreven onderdeel aanroept in een C++/WinRT-consoletoepassing.

Opmerking

Het gebruik van een C#/WinRT-onderdeel van C#/.NET-apps wordt ondersteund door zowel pakketverwijzing als project verwijzing. Dit scenario is gelijk aan het gebruik van een gewone C#-klassebibliotheek en omvat in de meeste gevallen geen WinRT-activering. Vanaf C#/WinRT 1.3.5 vereisen projectverwijzingen voor C#-consumenten .NET 6.

  1. Voeg een nieuwe C++/WinRT-consoletoepassing project toe aan uw oplossing. Houd er rekening mee dat deze project ook deel kunnen uitmaken van een andere oplossing als u dit kiest.

    a. Klik in Solution Explorer met de rechtermuisknop op het oplossingsknooppunt en klik op Toevoegen ->Nieuw Project.

    b. Zoek in het dialoogvenster Add New Project naar de sjabloon C++/WinRT Console Application project. Selecteer de sjabloon en klik op Volgende.

    Hoofdstuk c. Noem de nieuwe project CppConsoleApp en klik op Maak.

  2. Voeg een verwijzing toe naar het onderdeel AuthoringDemo, ofwel als een NuGet-pakket of een project verwijzing.

    • Optie 1 (pakketreferentie):

      a. Klik met de rechtermuisknop op de CppConsoleApp project en selecteer Beheer NuGet-pakketten. Mogelijk moet u uw pakketbronnen configureren om een verwijzing naar het NuGet-pakket AuthoringDemo toe te voegen. Om dit te doen, klikt u op het icoon Settings in NuGet Package Manager en voegt u een pakketbron toe aan het juiste pad.

      NuGet-instellingen

      b. Nadat u de pakketbronnen hebt geconfigureerd, zoekt u naar het AuthoringDemo-pakket en klikt u op Installeren.

      NuGet-pakket installeren

    • Option 2 (Project reference):

      a. Klik met de rechtermuisknop op de CppConsoleApp project en selecteer Toevoegen ->Reference. Voeg onder het knooppunt Projects een verwijzing toe naar de AuthoringDemo project.

  3. Als u het onderdeel wilt hosten, moet u een manifestbestand toevoegen voor activeringsbare klasseregistraties. Zie Managed component hosting voor meer informatie over het hosten van beheerde onderdelen.

    a. Als u het manifestbestand wilt toevoegen, klikt u opnieuw met de rechtermuisknop op de project en kiest u Toevoegen -> Nieuw item. Zoek het sjabloon voor tekstbestand en noem het CppConsoleApp.exe.manifest. Plak de volgende inhoud, waarmee de runtimeklassen worden opgegeven met behulp van activeerbare klasseregistratievermeldingen:

    <?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>
    

    Het manifestbestand van de toepassing is vereist voor apps die niet zijn verpakt. Voor verpakte apps moet de app consumer de activeringsbare klassen registreren in het manifestbestand Package.appxmanifest pakketmanifest, zoals uitgelegd in Walkthrough: Een C#-onderdeel maken met WinUI-besturingselementen en deze gebruiken vanuit een C++ Windows App SDK toepassing.

    b. Wijzig het project om het manifestbestand bij implementatie in de uitvoer op te nemen. Klik op het bestand CppConsoleApp.exe.manifest in Solution Explorer en stel de eigenschap Content in op True. Hier volgt een voorbeeld van hoe dit eruitziet.

    Inhoud implementeren

  4. Open pch.h onder de headerbestanden van de project en voeg de volgende coderegel toe om uw onderdeel op te nemen.

    #include <winrt/AuthoringDemo.h>
    
  5. Open main.cpp onder de bronbestanden van de project en vervang deze door de volgende inhoud.

    #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. Bouw en voer de CppConsoleApp project uit. U ziet nu de onderstaande uitvoer.

    C++/WinRT Console-uitvoer