Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
C++/CLI, .NET sınıflarını yerel C++ türleriyle birleştirerek C++ kodu alan kitaplıklar ve uygulamalar oluşturmanıza ve bunu .NET programlarına erişilebilir hale getirmenize olanak tanıyan bir teknolojidir.
Ortak Dil Çalışma Zamanı'nı (CLR) hedefleyen projelerinizde C++ bağımlılıklarını yüklemek ve kullanmak için vcpkg'yi C++/CLI ile birlikte kullanabilirsiniz.
Bu öğreticide şunların nasıl yapıldığını öğrenirsiniz:
Önkoşullar
- vcpkg
- Git
- Visual Studio için Geliştirici PowerShell
- Aşağıdaki bileşenlere sahip Visual Studio :
Örnek C++/CLI oluşturma
Bu öğreticide, mevcut bir C++/CLI uygulamasından başlayacağız ve vcpkg ile yüklenmiş bir C++ bağımlı ekleyeceğiz. Bu öğreticideki komutlar, bunları Visual Studio için Geliştirici PowerShell'de çalıştırdığınızı varsayar.
1 - Örnek depoyu kopyalama
İlk adım, .NET örnekleri deposunda C++/CLI örnek uygulamasının bir kopyasını almaktır. C++/CLI örnek uygulaması klasöründe bulunur core/interop/cpp-cli .
git clone https://github.com/dotnet/samples
2 - Örnek uygulama klasörüne gidin
cd samples/core/interpo/cpp-cli
2 - Projenin doğru şekilde derlenip çalıştığını kontrol edin
Örnek depo dört proje içeren bir çözüm içerir:
- ManagedLibrary: .NET için C# kitaplığı
- MixedLibrary: ManagedLibrary'den yerel C++ kodu ve .NET kodunu karıştıran bir kitaplık
- NativeApp: MixedLibrary'den .NET kodu kullanan bir C++ uygulaması
- ManagedApp: MixedLibrary'den C++ kodu kullanan bir C# uygulaması
Çözümün projelerini oluşturmak için aşağıdaki komutu çalıştırın:
msbuild CPP-CLI.sln -restore
Derleme başarısız olursa, Önkoşullar bölümünde listelenen Visual Studio için gerekli bileşenleri yüklediğinizden ve örnek uygulamanın.NET 5.0 SDK veya üzeri ve Visual Studio 2019 16.8 veya sonraki sürümlerinin en düşük gereksinimlerini karşıladığınızdan emin olun.
Derledikten sonra ManagedApp.exe çalıştırabilirsiniz
./bin/Debug/x64/ManagedApp.exe
Program aşağıdaki çıkışı oluşturur:
=== 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 - Projeyi Visual Studio'da açma
Sonraki adımlarda, konsola ileti yazdırmak için kullanılacak fmt kitaplığı değiştireceğiz.
fmt kitaplığı vcpkg aracılığıyla kurulacak ve onu kullanan projelere bağlanacaktır.
Kaynak dosyaları düzenlemek için Visual Studio'da CPP-CLI.sln çözümünü açın:
start CPP-CLI.sln
Çözüm Visual Studio'da açıldıktan sonra projeyi en son sürümlere yeniden hedeflemeniz istenebilir. Windows SDK Sürümünü ve Platform Araç Takımı'nı en son sürüme yükseltmek için Tamam'a tıklayabilirsiniz.
projenin hedef Windows SDK sürümünü ve Platform Araç Seti sürümünü en son sürüme
C++ yerel bağımlılığı ekleme
Daha sonra, MixedLibrary projesinde aşağıdaki değişiklikleri yapacağız.
-
fmtedinmek için bir vcpkg bildirimi ekleyin. - Projede vcpkg'yi etkinleştirin.
- İletileri yazdırmak için
fmtkullanacak şekildeNativeClass::Helloöğesini değiştirin.
1 - Vcpkg bildirimi oluşturma
NativeLibrary projesine sağ tıklayın ve bağlam menüsünde Yeni Öğe Ekle'ye > tıklayın.
Yeni öğeyi vcpkg.jsonadlandırın, bu vcpkg bildirim dosyasıdır ve dosyanın proje klasörünün kökünde oluşturulduğundan emin olun.
2 - fmt öğesini bağımlılık olarak ekleyin
vcpkg.json Dosyayı açın ve içeriğini aşağıdakiyle eşleşecek şekilde düzenleyin:
{
"dependencies": [ "fmt" ]
}
vcpkg bildirim dosyası doğru konumda bulunuyorsa ve projeyi derlemeye çalışırsanız aşağıdaki uyarıyı alırsınız:
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 - MixedLibrary'nin özelliklerinde vcpkg'yi etkinleştirme
Projeye sağ tıklayıp Özellikler seçeneğine tıklayarak MixedLibrary'nin özellikler sayfasını açın.
vcpkg bölümünde aşağıdaki özellikleri değiştirin:
- Vcpkg'yi kullan ayarı Evet olarak ayarlandı
- Vcpkg Bildirimi'ni kullan ayarı Evet olarak ayarlandı
- Instal Vcpkg Bağımlılıkları, Evet olarak ayarlandı
- Otomatik Bağlantı'yı kullan ayarı Evet olarak ayarlandı
- Uygulamanın yerel olarak dağıttığı DLL'ler Evet olarak ayarlandı
vcpkg'yi etkinleştirmek için gereklidir
Bu değişikliklerle Visual Studio artık dosyayı okuyacak vcpkg.json ve projeyi oluşturmadan önce bildirimde yer alan bağımlılıkları otomatik olarak yükleyecektir.
Özellikler sayfasındayken, fmt öğesinin doğru şekilde derlenmesi için /utf-8 bayrağını da etkinleştirmek istiyoruz.
C/C++ ayarlarının Komut Satırı alt bölümünde, /utf-8 öğesini içerecek şekilde Ek Seçenekler'i düzenleyin
Son olarak, Özellikler sayfasını kapatmak için Tamam'a tıklayın.
4 - vcpkg'nin çalıştığını doğrulama
Her şey doğru yapılandırıldıysa Visual Studio, MixedLibrary projesini oluşturmadan önce bağımlılıklarınızı yüklemek için vcpkg'yi çağırır.
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\"
vcpkg çıktısını görmüyorsanız veya fmt derlenemezse, > ifadesini C/C++ /utf-8 Komut Satırı'ndaki Ek Seçenekler'e eklemek de dahil olmak üzere yukarıdaki adımları doğru şekilde izlediğinizden emin olun.
4 - Projenin kaynak kodunu değiştirme
Son olarak, konsola mesaj yazdırmak için fmt kullanacak şekilde MixedLibrary.cpp dosyasını değiştirmek istiyoruz. Kaynak kodunda aşağıdaki değişiklikleri yapın:
1 - Üst bilgiyi ekleyin fmt/printf.h (5. satıra).
#include <iostream>
#include <vcclr.h>
#include <fmt/printf.h>
2 - NativeClass::Hello işlevini fmt::println kullanacak şekilde değiştirin (44. satırda).
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);
}
Uygulama oluşturma
İşlev, NativeClass::Hello C++ kodu kullanılarak konsola ileti yazdırmak için ManagedApp projesinde kullanılır. Yukarıdaki değişiklikler, fmt kitaplığının CLR uygulamasında kullanılmasını sağlar.
Uygulamanın projesinde herhangi bir değişiklik yapmanız gerekmez; yalnızca ManagedApp projesini derleyip çalıştırın.
Programın çıkışı şuna benzer görünmelidir:
=== 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
Sonraki adımlar
Ayrıca diğer yararlı özellikler hakkında da bilgi edinin: