Tutoriel : Installer des dépendances natives dans une application CLR
Article
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 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 :
Une fois généré, 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 à utiliser fmt pour imprimer des messages dans la console. La fmt bibliothèque sera installée via vcpkg et liée dans les projets consommants.
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 à acquérir fmt.
Activez vcpkg dans le projet.
Modifiez l’option NativeClass::Hello à utiliser fmt pour imprimer 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épédité
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 défini sur Oui
Dépendances Vcpkg instal définies sur Oui
Utiliser le lien automatique défini sur Oui
Déployer localement des DLL 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 à 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.
Si vous ne voyez pas de sortie vcpkg ou si fmt vous ne parvenez pas à générer, vérifiez que vous avez suivi les étapes ci-dessus correctement, y compris l’ajout /utf-8 des options supplémentaires dans la ligne de commande C/C++ > .
4 - Modifier le code source du projet
Enfin, nous voulons modifier le MixedLibrary.cpp fichier à utiliser fmt pour imprimer des messages dans la console. Apportez les modifications suivantes au code source :
1 - Inclure l’en-tête (à la fmt/printf.h ligne 5).
2 - Modifier la fonction à utiliser fmt::println (à la NativeClass::Hello 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 l’apportent afin que la fmt bibliothèque soit consommé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 :
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.
Commentaires sur vcpkg
vcpkg est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Créez un projet .NET et apprenez à ajouter des packages et à gérer les dépendances de package de votre projet. Utilisez CLI .NET Core et le registre NuGet pour ajouter des bibliothèques et des outils à vos applications C# par le biais de Visual Studio Code.