Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
C++/CLI to technologia umożliwiająca łączenie klas platformy .NET z natywnymi typami języka C++, aby tworzyć biblioteki i aplikacje, które przyjmują kod C++ i umożliwiają dostęp do programów .NET.
Narzędzie vcpkg można używać w połączeniu z językiem C++/CLI do instalowania i używania zależności języka C++ w projektach przeznaczonych dla środowiska uruchomieniowego języka wspólnego (CLR).
Niniejszy samouczek zawiera informacje na temat wykonywania następujących czynności:
Wymagania wstępne
- vcpkg
- Usługa Git
- Program PowerShell dla deweloperów dla programu Visual Studio
- Program Visual Studio z następującymi składnikami:
Tworzenie przykładowego języka C++/interfejsu wiersza polecenia
W tym samouczku zaczniemy od istniejącej aplikacji C++/CLI i dodamy zależność języka C++ zainstalowaną z narzędziem vcpkg. W poleceniach w tym samouczku założono, że uruchamiasz je w programie PowerShell dla deweloperów dla programu Visual Studio.
1 — Klonowanie przykładowego repozytorium
Pierwszym krokiem jest pobranie kopii przykładowej aplikacji C++/CLI w repozytorium przykładów platformy .NET. Przykładowa aplikacja C++/CLI znajduje się w folderze core/interop/cpp-cli .
git clone https://github.com/dotnet/samples
2 — Przejdź do folderu przykładowej aplikacji
cd samples/core/interpo/cpp-cli
2 — Sprawdź, czy projekt kompiluje i działa prawidłowo
Przykładowe repozytorium zawiera rozwiązanie z czterema projektami:
- ManagedLibrary: biblioteka języka C# dla platformy .NET
- MixedLibrary: biblioteka mieszająca natywny kod C++ i kod platformy .NET z biblioteki ManagedLibrary
- NativeApp: aplikacja C++, która korzysta z kodu platformy .NET z biblioteki MixedLibrary
- ManagedApp: aplikacja w języku C#, która korzysta z kodu C++ z biblioteki MixedLibrary
Uruchom następujące polecenie, aby skompilować projekty rozwiązania:
msbuild CPP-CLI.sln -restore
Jeśli kompilacja nie powiedzie się, upewnij się, że zainstalowano wymagane składniki programu Visual Studio wymienione w sekcji Wymagania wstępne i że spełniasz minimalne wymagania dotyczące zestawu .NET 5.0 SDK lub nowszego oraz programu Visual Studio 2019 16.8 lub nowszego] przykładowej aplikacji.
Po utworzeniu można uruchomić polecenie ManagedApp.exe
./bin/Debug/x64/ManagedApp.exe
Program generuje następujące dane wyjściowe:
=== 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 — Otwieranie projektu w programie Visual Studio
W następnych krokach zmodyfikujemy bibliotekę tak, aby wyświetlała fmt komunikaty w konsoli programu . Biblioteka fmt zostanie zainstalowana za pośrednictwem narzędzia vcpkg i zostanie połączona w projektach zużywających.
Aby edytować pliki źródłowe, otwórz rozwiązanie CPP-CLI.sln w programie Visual Studio:
start CPP-CLI.sln
Po otwarciu rozwiązania w programie Visual Studio może zostać wyświetlony monit o ponowne pobranie projektu do najnowszych wersji. Możesz kliknąć przycisk OK, aby uaktualnić zestaw narzędzi zestawu SDK systemu Windows do najnowszej wersji.
docelowa wersja zestawu SDK systemu Windows i zestaw narzędzi platformy dla projektu do najnowszej wersji.
Dodawanie zależności natywnej języka C++
Następnie wprowadzimy następujące zmiany w projekcie MixedLibrary.
- Dodaj manifest vcpkg, aby uzyskać
fmtelement . - Włącz narzędzie vcpkg w projekcie.
- Zmodyfikuj element ,
NativeClass::Helloabyfmtdrukować komunikaty.
1 — Tworzenie manifestu vcpkg
Kliknij prawym przyciskiem myszy projekt NativeLibrary i kliknij polecenie Dodaj > nowy element w menu kontekstowym.
Nadaj nowej nazwie nowy element vcpkg.json, jest to plik manifestu vcpkg i upewnij się, że plik został utworzony w katalogu głównym folderu projektu.
2 — Dodawanie fmt jako przestarzałe
Otwórz plik i zmodyfikuj vcpkg.json jego zawartość, aby odpowiadała następującej zawartości:
{
"dependencies": [ "fmt" ]
}
Jeśli plik manifestu programu vcpkg znajduje się w odpowiedniej lokalizacji i spróbujesz skompilować projekt, zostanie wyświetlone następujące ostrzeżenie:
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 — Włączanie vcpkg we właściwościach biblioteki mieszanej
Otwórz stronę właściwości biblioteki mieszanej, klikając prawym przyciskiem myszy projekt i klikając opcję Właściwości.
Zmień następujące właściwości w sekcji vcpkg:
- Użyj zestawu Vcpkg na wartość Tak
- Użyj manifestu Vcpkg ustawionego na wartość Tak
- Instal Vcpkg Dependencies ustawiono wartość Tak
- Użyj ustawienia AutoLink na wartość Tak
- Lokalnie wdrażaj biblioteki DLL w aplikacji na wartość Tak
wymagane do włączenia programu vcpkg
Dzięki tym zmianom program Visual Studio odczyta plik vcpkg.json i automatycznie zainstaluje zależności zawarte w manifeście przed utworzeniem projektu.
Na stronie Właściwości chcemy również włączyć flagę w celu fmt poprawnego utworzenia /utf-8 kompilacji.
W podsekcji Wiersza polecenia ustawień języka C/C++ edytuj opcje dodatkowe, aby uwzględnić /utf-8 je w
Na koniec kliknij przycisk OK, aby zamknąć stronę Właściwości.
4 — Sprawdź, czy narzędzie vcpkg działa
Jeśli wszystko jest poprawnie skonfigurowane, program Visual Studio wywoła narzędzie vcpkg w celu zainstalowania zależności przed utworzeniem 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\"
Jeśli nie widzisz danych wyjściowych narzędzia vcpkg lub jeśli fmt kompilacja nie powiedzie się, upewnij się, że powyższe kroki zostały wykonane poprawnie, w tym dodanie /utf-8 dodatkowych opcji w wierszu polecenia języka C/C++ > .
4 — Modyfikowanie kodu źródłowego projektu
Na koniec chcemy zmodyfikować plik tak MixedLibrary.cpp , aby był używany fmt do drukowania komunikatów w konsoli programu . Wprowadź następujące zmiany w kodzie źródłowym:
1 — dołącz fmt/printf.h nagłówek (w wierszu 5).
#include <iostream>
#include <vcclr.h>
#include <fmt/printf.h>
2 — Zmodyfikuj NativeClass::Hello funkcję do użycia fmt::println (w wierszu 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);
}
Kompilowanie aplikacji
Funkcja NativeClass::Hello jest używana w projekcie ManagedApp do drukowania komunikatu w konsoli przy użyciu kodu C++. Powyższe zmiany sprawiają, że fmt biblioteka jest zużywana w aplikacji CLR.
Nie są potrzebne żadne zmiany w projekcie aplikacji, wystarczy skompilować i uruchomić projekt ManagedApp.
Dane wyjściowe programu powinny wyglądać podobnie do następujących:
=== 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
Następne kroki
Zapoznaj się również z innymi przydatnymi funkcjami: