Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
C++/CLI je technologie, která umožňuje kombinovat třídy .NET s nativními typy jazyka C++ a vytvářet knihovny a aplikace, které přebírají kód jazyka C++ a umožňují přístup k programům .NET.
Vcpkg můžete v kombinaci s C++/CLI použít k instalaci a využívání závislostí C++ ve vašich projektech, které cílí na modul CLR (Common Language Runtime).
V tomto kurzu se naučíte, jak:
Požadavky
- vcpkg
- Git
- Developer PowerShell pro Visual Studio
- Visual Studio s následujícími komponentami:
Vytvoření ukázkového C++/CLI
V tomto kurzu začneme z existující aplikace C++/CLI a přidáme závislé prostředí C++ nainstalované s vcpkg. Příkazy v tomto kurzu předpokládají, že je spouštíte v prostředí Developer PowerShell pro Visual Studio.
1. Klonování ukázkového úložiště
Prvním krokem je získání kopie ukázkové aplikace C++/CLI v úložišti ukázek .NET. Ukázková aplikace C++/CLI se nachází ve core/interop/cpp-cli složce.
git clone https://github.com/dotnet/samples
2. Přejděte do složky ukázkové aplikace.
cd samples/core/interpo/cpp-cli
2 . Zkontrolujte, jestli se projekt sestaví a spustí správně.
Ukázkové úložiště obsahuje řešení se čtyřmi projekty:
- ManagedLibrary: Knihovna jazyka C# pro .NET
- MixedLibrary: Knihovna, která kombinuje nativní kód C++ a kód .NET z ManagedLibrary
- NativeApp: Aplikace C++, která využívá kód .NET z mixedLibrary
- ManagedApp: Aplikace jazyka C#, která využívá kód jazyka C++ z mixedLibrary
Spuštěním následujícího příkazu sestavte projekty řešení:
msbuild CPP-CLI.sln -restore
Pokud sestavení selže, ujistěte se, že jste nainstalovali požadované součásti pro Visual Studio uvedené v části Požadavky a že splňujete minimální požadavky .NET 5.0 SDK nebo novější a Visual Studio 2019 16.8 nebo novější ukázkové aplikace.
Po sestavení můžete spustit ManagedApp.exe
./bin/Debug/x64/ManagedApp.exe
Program vytvoří následující výstup:
=== 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. Otevření projektu v sadě Visual Studio
V dalších krocích upravíme knihovnu tak, aby používala fmt k tisku zpráv do konzoly. Knihovna fmt bude nainstalována prostřednictvím vcpkg a propojena v projektech, které ji využívají.
Pokud chcete upravit zdrojové soubory, otevřete řešení CPP-CLI.sln v sadě Visual Studio:
start CPP-CLI.sln
Po otevření řešení v sadě Visual Studio se může zobrazit výzva k opětovnému cílení projektu na nejnovější verze. Kliknutím na tlačítko OK můžete aktualizovat verzi sady Windows SDK a sadu nástrojů platformy na nejnovější verzi.
nastavit cílovou verzi sady Windows SDK projektu a verzi sady nástrojů platformy na nejnovější verzi.
Přidání nativní závislosti jazyka C++
Dále provedeme následující změny projektu MixedLibrary.
- Přidejte manifest vcpkg pro získání
fmt. - Povolte v projektu vcpkg.
- Upravte
NativeClass::Hello, aby používalfmtk vypisování zpráv.
1. Vytvoření manifestu vcpkg
Klikněte pravým tlačítkem myši na projekt NativeLibrary a v místní nabídce klikněte na Přidat > novou položku.
Pojmenujte novou položku vcpkg.json, jedná se o soubor manifestu vcpkg a ujistěte se, že je soubor vytvořen v kořenové složce projektu.
2 – Přidejte fmt jako závislost
vcpkg.json Otevřete soubor a upravte jeho obsah tak, aby odpovídal následujícímu:
{
"dependencies": [ "fmt" ]
}
Pokud se soubor manifestu vcpkg nachází ve správném umístění a pokusíte se sestavit projekt, zobrazí se následující upozornění:
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 - Povolte vcpkg ve vlastnostech MixedLibrary
Otevřete stránku vlastností mixedLibrary tak, že kliknete pravým tlačítkem myši na projekt a kliknete na možnost Vlastnosti.
V části vcpkg změňte následující vlastnosti:
- Použití Vcpkg nastaveno na Ano
- Použít manifest Vcpkg nastaveno na Ano
- Instalovat závislosti Vcpkg nastaveno na Ano
- Použít automatické propojení nastaveno na Ano
- Lokální nasazení knihoven DLL pro aplikaci nastaveno na Ano
vyžadováno pro povolení vcpkg
Díky těmto změnám Visual Studio nyní přečte soubor vcpkg.json a před sestavením projektu automaticky nainstaluje závislosti obsažené v manifestu.
Na stránce Vlastnosti chceme také povolit příznak /utf-8, aby se fmt sestavil správně.
V pododdílu Příkazový řádek v nastavení C/C++ upravte položku Další možnosti tak, aby zahrnovala /utf-8 v
Nakonec kliknutím na tlačítko OK zavřete stránku Vlastnosti.
4. Ověření, že vcpkg funguje
Pokud je vše správně nakonfigurované, Visual Studio vyvolá vcpkg k instalaci závislostí před sestavením projektu 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\"
Pokud se nezobrazuje výstup vcpkg nebo pokud fmt se nepodaří sestavit, ujistěte se, že jste postupovali podle výše uvedených kroků, včetně přidání /utf-8 do dalších možností v příkazovém řádku C/C++ > .
4. Úprava zdrojového kódu projektu
Nakonec chceme upravit soubor MixedLibrary.cpp, aby používal fmt k výpisu zpráv do konzole. Proveďte následující změny zdrojového kódu:
1 – Vložte záhlaví fmt/printf.h (na řádku 5).
#include <iostream>
#include <vcclr.h>
#include <fmt/printf.h>
2 – Upravte NativeClass::Hello funkci tak, aby používala fmt::println (na řádku 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);
}
Sestavení aplikace
Funkce NativeClass::Hello se používá v projektu ManagedApp k tisku zprávy do konzoly pomocí kódu C++. Výše uvedené změny zajistí, že knihovna fmt bude používána v aplikaci CLR.
Nejsou potřeba žádné změny projektu aplikace, stačí sestavit a spustit projekt ManagedApp.
Výstup programu by měl vypadat nějak takto:
=== 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
Další kroky
Seznamte se také s dalšími užitečnými funkcemi: