Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
C++/CLI est une technologie qui vous permet de combiner des classes .NET avec des types C++ natifs pour créer des bibliothèques et des applications qui prennent du code C++ et la rendre accessible aux programmes .NET.
Vous pouvez utiliser vcpkg en combinaison avec C++/CLI pour installer et consommer des dépendances C++ dans vos projets ciblant le Common Language Runtime (CLR).
Dans ce didacticiel, vous apprendrez à :
Prérequis
- vcpkg
- Git
- PowerShell développeur pour Visual Studio
- Visual Studio avec les composants suivants :
Générer un exemple C++/CLI
Dans ce tutoriel, nous allons commencer à partir d’une application C++/CLI existante et ajouter une dépendance C++ installée avec vcpkg. Les commandes de ce didacticiel supposent que vous les exécutez dans un PowerShell développeur pour Visual Studio.
1 - Clonez l’exemple de dépôt
La première étape consiste à obtenir une copie de l’exemple d’application C++/CLI dans le référentiel d’exemples .NET. L’exemple d’application C++/CLI se trouve dans le core/interop/cpp-cli dossier.
git clone https://github.com/dotnet/samples
2 - Accédez à l’exemple de dossier d’application
cd samples/core/interpo/cpp-cli
2 - Vérifier que le projet génère et s’exécute correctement
L’exemple de référentiel contient une solution avec quatre projets :
- ManagedLibrary : bibliothèque C# pour .NET
- MixedLibrary : bibliothèque qui combine du code C++ natif et du code .NET à partir de ManagedLibrary
- NativeApp : application C++ qui consomme du code .NET à partir de MixedLibrary
- ManagedApp : application C# qui consomme du code C++ à partir de MixedLibrary
Exécutez la commande suivante pour générer les projets de la solution :
msbuild CPP-CLI.sln -restore
Si la build échoue, vérifiez que vous avez installé les composants requis pour Visual Studio répertoriés dans la section Conditions préalables, et que vous répondez à la configuration minimale requise de .NET sdk 5.0 ou version ultérieure et Visual Studio 2019 16.8 ou version ultérieure de l’exemple d’application.
Une fois compilé, vous pouvez exécuter ManagedApp.exe
./bin/Debug/x64/ManagedApp.exe
Le programme génère la sortie suivante :
=== Managed class ===
Hello from ManagedClass in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
=== P/Invoke ===
Hello from NativeEntryPoint_CallNative in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
3 - Ouvrir le projet dans Visual Studio
Dans les étapes suivantes, nous allons modifier la bibliothèque pour utiliser fmt afin d’afficher des messages dans la console. La bibliothèque fmt sera installée au moyen de vcpkg et liée aux projets consommateurs.
Pour modifier les fichiers sources, ouvrez la solution CPP-CLI.sln dans Visual Studio :
start CPP-CLI.sln
Une fois la solution ouverte dans Visual Studio, vous pouvez recevoir une invite pour recibler le projet vers les dernières versions. Vous pouvez cliquer sur OK pour mettre à niveau la version du Kit de développement logiciel (SDK) Windows et l’ensemble d’outils de plateforme vers la dernière version.
version cible du Kit de développement logiciel (SDK) Windows et version de l’ensemble d’outils de plateforme du projet vers la dernière version.
Ajouter une dépendance native C++
Ensuite, nous allons apporter les modifications suivantes au projet MixedLibrary.
- Ajoutez un manifeste vcpkg pour obtenir
fmt. - Activez vcpkg dans le projet.
- Modifiez
NativeClass::Hellopour utiliserfmtafin d’afficher des messages.
1 - Créer un manifeste vcpkg
Cliquez avec le bouton droit sur le projet NativeLibrary, puis cliquez sur Ajouter un > nouvel élément dans le menu contextuel.
Nommez le nouvel élément vcpkg.json, il s’agit du fichier manifeste vcpkg et assurez-vous que le fichier est créé à la racine du dossier du projet.
2 - Ajouter fmt en tant que dépendance
Ouvrez le vcpkg.json fichier et modifiez son contenu pour qu’il corresponde à ce qui suit :
{
"dependencies": [ "fmt" ]
}
Si le fichier manifeste vcpkg se trouve à l’emplacement approprié et que vous essayez de générer le projet, vous recevez l’avertissement suivant :
The vcpkg manifest was disabled, but we found a manifest file in samples\core\interop\cpp-cli\MixedLibrary\. You may want to enable vcpkg manifests in your properties page or pass /p:VcpkgEnableManifest=true to the msbuild invocation.
3 - Activer vcpkg dans les propriétés de MixedLibrary
Ouvrez la page des propriétés de MixedLibrary en cliquant avec le bouton droit sur le projet et en cliquant sur l’option Propriétés.
Modifiez les propriétés suivantes dans la section vcpkg :
- Utiliser Vcpkg défini sur Oui
- Utiliser le manifeste Vcpkg réglé sur Oui
- Installer les dépendances Vcpkg défini sur Oui
- Utiliser le lien automatique défini sur Oui
- Déployer localement les DLL de l’application sur Oui
requis pour activer vcpkg
Avec ces modifications, Visual Studio lit désormais le vcpkg.json fichier et installe automatiquement les dépendances contenues dans le manifeste avant de générer le projet.
Dans la page Propriétés, nous souhaitons également permettre à l’indicateur /utf-8 de générer fmt correctement.
Dans la sous-section Ligne de commande des paramètres C/C++, modifiez les Options supplémentaires pour inclure /utf-8 dans le
Enfin, cliquez sur OK pour fermer la page Propriétés.
4 - Vérifier que vcpkg fonctionne
Si tout est correctement configuré, Visual Studio appelle vcpkg pour installer vos dépendances avant de générer le projet MixedLibrary.
1>Installing vcpkg dependencies to C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\vcpkg_installed\x64-windows\
1>"C:\path\to\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "C:\path\to\vcpkg\" "--x-manifest-root=C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\" "--x-install-root=C:\path\to\samples\core\interop\cpp-cli\MixedLibrary\vcpkg_installed\x64-windows\"
Si vous ne voyez pas la sortie de vcpkg, ou si fmt ne parvient pas à se générer, vérifiez que vous avez correctement suivi les étapes ci-dessus, y compris l’ajout de /utf-8 dans Options supplémentaires de C/C++ > Ligne de commande.
4 - Modifier le code source du projet
Enfin, nous voulons modifier le fichier MixedLibrary.cpp pour utiliser fmt afin d’afficher des messages dans la console. Apportez les modifications suivantes au code source :
1 - Inclure l’fmt/printf.hen-tête (ligne 5).
#include <iostream>
#include <vcclr.h>
#include <fmt/printf.h>
2 - Modifier la fonction NativeClass::Hello pour utiliser fmt::println (à la ligne 44).
void MixedLibrary::NativeClass::Hello(const wchar_t *msg)
{
auto ws = std::wstring(msg);
auto str = std::string(ws.length(), 0);
std::transform(ws.begin(), ws.end(), std::back_inserter(str), [](wchar_t c) { return static_cast<char>(c); });
fmt::println("Hello from NativeClass in MixedLibrary");
fmt::println("-- message: {}", str);
fmt::println("-- printed using FMT version {}", FMT_VERSION);
}
Créer l’application
La NativeClass::Hello fonction est utilisée dans le projet ManagedApp pour imprimer un message dans la console à l’aide du code C++. Les modifications ci-dessus font en sorte que la bibliothèque fmt soit utilisée dans l’application CLR.
Aucun changement n’est nécessaire pour le projet de l’application, il vous suffit de générer et d’exécuter le projet ManagedApp.
La sortie du programme doit ressembler à ceci :
=== Managed class ===
Hello from ManagedClass in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
-- printed using FMT version 110002
=== P/Invoke ===
Hello from NativeEntryPoint_CallNative in MixedLibrary
Hello from NativeClass in MixedLibrary
-- message: from managed app!
-- printed using FMT version 110002
Étapes suivantes
Découvrez également d’autres fonctionnalités utiles :