Delen via


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

Met C#/WinRT kunnen ontwikkelaars met .NET hun eigen Windows Runtime-onderdelen in C# ontwerpen met behulp van een klassebibliotheekproject. Ontwerponderdelen kunnen worden gebruikt in systeemeigen bureaubladtoepassingen als pakketreferentie of als projectreferentie met 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 dat de code voor dit artikel bevat. Zie Auteurscomponentenvoor meer informatie over auteurschap.

Voor een overzicht van het ontwerpen van WinUI-besturingselementen met C#/WinRT, specifiek voor gebruik in Windows App SDK-toepassingen, raadpleegt u het artikel Walkthrough: Een C#-onderdeel ontwerpen met WinUI 3-besturingselementen en gebruiken vanuit een C++ Windows App SDK-toepassing

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 nieuw project in Visual Studio. Selecteer de projectsjabloon Class Library en geef het project de naam AuthoringDemo. U moet de volgende toevoegingen en wijzigingen aan het project aanbrengen:

  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 projectknooppunt en selecteer NuGet-pakketten beheren.

    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 het project bouwt.

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

    Raadpleeg de C#/WinRT NuGet-documentatie voor een volledige lijst met C#/WinRT-projecteigenschappen.

  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 nu het project bouwen om het .winmd bestand voor uw onderdeel te genereren. Klik met de rechtermuisknop op het project in Solution Explorer en klik op Bouwen. 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 het project bouwt een NuGet-pakket wilt genereren, voegt u de volgende eigenschap toe aan het projectbestand AuthoringDemo en bouwt u het project vervolgens opnieuw.

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>
    
  • U kunt ook een NuGet-pakket genereren door met de rechtermuisknop op het Project AuthoringDemo in Solution Explorer te klikken 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 Een pakket maken met 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 -compatibele taal (WinRT). 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 pakketverwijzingen als projectverwijzingen. 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# gebruikers .NET 6.

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

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

    b. Zoek in het dialoogvenster Nieuw project toevoegennaar de C++/WinRT-consoletoepassing projectsjabloon. Selecteer de sjabloon en klik op Volgende.

    Hoofdstuk c. Noem het nieuwe project CppConsoleApp en klik op Creƫren.

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

    • Optie 1 (pakketreferentie):

      a. Klik met de rechtermuisknop op het CppConsoleApp-project en selecteer NuGet-pakketten beheren. Mogelijk moet u uw pakketbronnen configureren om een verwijzing naar het NuGet-pakket AuthoringDemo toe te voegen. Klik hiervoor op het pictogram Instellingen in NuGet Package Manager en voeg 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

    • Optie 2 (Projectreferentie):

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

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

    a. Als u het manifestbestand wilt toevoegen, klikt u opnieuw met de rechtermuisknop op het project en kiest u Add -> New 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-consument de activeringsklassen registreren in het manifestbestand van het Package.appxmanifest pakket, zoals uitgelegd in Walkthrough: Een C#-onderdeel maken met WinUI 3-besturingselementen en deze gebruiken vanuit een C++ Windows App SDK-toepassing.

    b. Wijzig het project om het manifestbestand op te nemen in de uitvoer bij het implementeren van het project. Klik op het CppConsoleApp.exe.manifestbestand in Solution Explorer en stel de eigenschap Inhoud in op Waar. Hier volgt een voorbeeld van hoe dit eruitziet.

    Inhoud implementeren

  4. Open pch.h onder de headerbestanden van het 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 het 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 het CppConsoleApp-project uit. U ziet nu de onderstaande uitvoer.

    C++/WinRT Console-uitvoer