Aracılığıyla paylaş


Evrensel Windows Platformu’na bağlantı noktası oluşturma (C++)

Bu konu başlığında, mevcut C++ kodunu Windows uygulama platformuna (Evrensel Windows Platformu) taşıma hakkında bilgi bulabilirsiniz. Evrensel teriminin anlamı, kodunuzun Windows 10 veya üzerini çalıştıran cihazlardan herhangi birinde çalışabilmesidir. Windows 10 veya üzerini çalıştıran herhangi bir cihazda düzgün çalışan tek bir proje ve tek bir XAML tabanlı kullanıcı arabirimi oluşturursunuz. Uygulamanın kullanıcı arabiriminin farklı görüntü boyutlarına uyum sağlamasına izin vermek için XAML'deki dinamik düzen özelliklerini kullanabilirsiniz.

Windows Geliştirme Merkezi belgeleri, Windows 8.1 uygulamalarını Evrensel Windows Platformu taşımaya yönelik bir kılavuz içerir. Bkz. Windows Çalışma Zamanı 8'den UWP'ye geçme. Kılavuz çoğunlukla C# koduna odaklansa da kılavuzun çoğu C++ için geçerlidir. Aşağıdaki yordamlar daha ayrıntılı bilgiler içerir. Ayrıca bkz. Masaüstü uygulamasından UWP'ye taşıma.

Bu konu başlığında, kodu UWP'ye taşımaya yönelik aşağıdaki yordamlar yer alır.

Klasik bir masaüstü Win32 DLL'niz varsa ve bunu bir UWP uygulamasından çağırmak istiyorsanız, bunu da yapabilirsiniz. Bu tür yordamları kullanarak, mevcut bir klasik Windows masaüstü C++ uygulaması veya platformlar arası standart C++ kodunuz için bir UWP kullanıcı arabirimi katmanı oluşturabilirsiniz. Bkz. Nasıl yapılır: Evrensel Windows Platformu Uygulamasında Mevcut C++ Kodunu Kullanma.

Windows 8.1 Mağazası Uygulamasını UWP'ye Taşıma

Bir Windows 8.1 Store Uygulamanız varsa, UWP ve Windows 10 veya sonraki bir sürümü çalıştıran herhangi bir cihazda çalışmasını sağlamak için bu yordamı kullanabilirsiniz. İlk olarak derleyici ve kitaplıklardaki değişikliklerden kaynaklanan sorunları ortadan kaldırmak için projeyi Visual Studio 2019 ile bir Windows 8.1 projesi olarak derlemek iyi bir fikirdir. Bunu yaptıktan sonra, bunu bir Windows UWP projesine dönüştürmenin iki yolu vardır. En kolay yol (aşağıdaki yordamda açıklandığı gibi) bir Evrensel Windows projesi oluşturmak ve var olan kodunuzu buna kopyalamaktır. Windows 8.1 masaüstü ve Windows 8.1 Telefon için Evrensel proje kullanıyorsanız, projeniz XAML'de iki farklı düzenle başlar ancak görüntü boyutuna göre ayarlanan tek bir dinamik düzen ile biter.

Windows 8.1 Store Uygulamasını UWP'ye taşıma

  1. Henüz yapmadıysanız, Windows 8.1 Uygulama projenizi Visual Studio 2017'de açın ve proje dosyasını yükseltmek için yönergeleri izleyin.

    Visual Studio kurulumunda Windows 8.1 Araçları'nı yüklemiş olmanız gerekir. Bu araçlar yüklü değilse, Programlar ve Özellikler penceresinden Visual Studio kurulumunu başlatın, Visual Studio 2017'yi seçin ve kurulum penceresinde Değiştir'i seçin. Windows 8.1 Araçları'nı bulun, seçili olduğundan emin olun ve Tamam'ı seçin.

  2. Proje Özellikleri penceresini açın ve C++>Genel'in altında Platform Araç Takımı'nıVisual Studio 2017 araç takımı v141 olarak ayarlayın.

  3. Projeyi bir Windows 8.1 projesi olarak derleyin ve derleme hatalarını giderin. Bu aşamadaki tüm hatalar büyük olasılıkla derleme araçları ve kitaplıklarındaki hataya neden olan değişikliklerden kaynaklanıyordur. Kodunuzu etkileyebilecek değişikliklerin ayrıntılı açıklaması için bkz . Visual C++ değişiklik geçmişi 2003 - 2015 .

    Projeniz temiz bir şekilde derledikten sonra Evrensel Windows Platformu'a taşımaya hazırsınız demektir.

  4. Boş şablonunu kullanarak yeni bir Evrensel Windows Uygulaması projesi oluşturun. Bunu yapmak için projelerin farklı dizinlerde olması gerekir, ancak var olan projenizle aynı adı vermek isteyebilirsiniz.

  5. Çözümü kapatın ve Windows Gezgini'ni veya komut satırını kullanarak, Windows 8.1 projenizdeki kod dosyalarını (.cpp, .h ve .xaml uzantılarıyla) 1. adımda oluşturduğunuz projenin proje dosyasıyla (.vcxproj) aynı klasöre kopyalayın. Package.appxmanifest dosyasını kopyalamayın ve Windows 8.1 masaüstü ve telefonu için ayrı kodunuz varsa, önce bağlantı noktası için bunlardan birini seçin (daha sonra diğerine uyarlamak için bazı çalışmalar yapmanız gerekir). Alt klasörleri ve içeriklerini kopyaladığınızdan emin olun. İstenirse, tüm dosyaları yinelenen adlarla değiştirmeyi seçin.

  6. Çözümü yeniden açın ve proje düğümünün kısayol menüsünde Varolan Öğeyi Ekle'yi>seçin. Zaten projenin parçası olan dosyalar dışında kopyaladığınız tüm dosyaları seçin.

    Tüm alt klasörleri denetleyin ve dosyaları da eklediğinizden emin olun.

  7. Eski projenizle aynı proje adını kullanmıyorsanız Package.appxmanifest dosyasını açın ve Giriş Noktasını sınıfın ad alanı adını yansıtacak şekilde güncelleştirin.App

    Package.appxmanifest dosyasındaki Giriş Noktası alanı, sınıfını içeren ad alanını içeren kapsamlı bir sınıf adı App içerirApp. Evrensel Windows projesi oluşturduğunuzda, ad alanı projenin adına ayarlanır. Bu, eski projenizden kopyaladığınız dosyalarda bulunanlardan farklıysa, bunları eşleştirmek için birini veya diğerini güncelleştirmeniz gerekir.

  8. Projeyi derleyin ve Windows SDK'nın farklı sürümleri arasındaki hataya neden olan değişikliklerden kaynaklanan derleme hatalarını giderin.

  9. Projeyi Yerel Masaüstünde çalıştırın. Dağıtım hatası olmadığını ve uygulamanın düzeninin makul göründüğünü ve masaüstünde düzgün çalıştığını doğrulayın.

  10. Windows Telefon 8.1 gibi başka bir cihaz için ayrı kod dosyalarınız ve .xaml'iniz varsa, bu kodu inceleyin ve standart cihazdan ne kadar farklı olduğunu belirleyin. Fark yalnızca düzendeyse, ekranın boyutuna bağlı olarak görüntüyü özelleştirmek için xaml içinde bir Visual State Manager kullanabilirsiniz. Diğer farklılıklar için aşağıdaki #if deyimlerini kullanarak kodunuzdaki koşullar bölümlerini kullanabilirsiniz.

    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
    

    Bu deyimler sırasıyla UWP uygulamaları, Windows Telefon Mağazası uygulamaları veya her ikisi için de geçerlidir (yalnızca klasik Win32 masaüstü). Bu makrolar yalnızca Windows SDK 8.1 ve sonraki sürümlerde kullanılabilir, bu nedenle kodunuzun Windows SDK'nın önceki sürümleriyle veya Windows dışındaki diğer platformlar için derlenmesi gerekiyorsa, bunların hiçbirinin tanımlanmadığını da göz önünde bulundurmanız gerekir.

  11. Uygulamanızın desteklediği her cihaz türü için bir öykünücüde veya fiziksel cihazda uygulamayı çalıştırın ve hatalarını ayıklar. Öykünücü çalıştırmak için Visual Studio'yu sanal makinede değil fiziksel bir bilgisayarda çalıştırmanız gerekir.

Windows 8.1 Çalışma Zamanı Bileşenini UWP'ye Taşıma

Windows 8.1 Mağazası uygulamalarıyla zaten çalışan bir DLL veya Windows Çalışma Zamanı Bileşeniniz varsa, bileşenin veya DLL'nin Windows üzerinde UWP ile çalışmasını sağlamak için bu yordamı kullanabilirsiniz. Temel yordam, yeni bir proje oluşturmak ve kodunuzu buna kopyalamaktır.

Bir Windows 8.1 Çalışma Zamanı Bileşenini UWP'ye taşıma

  1. Visual Studio 2017'deki Yeni Proje iletişim kutusunda Windows Evrensel düğümünü bulun. Bu düğümü görmüyorsanız, önce Windows SDK'sını yükleyin. Windows Çalışma Zamanı Bileşeni şablonunu seçin, bileşeniniz için bir ad verin ve Tamam düğmesini seçin. Bileşen adı ad alanı adı olarak kullanılır, bu nedenle eski projelerinizin ad alanıyla aynı adı kullanmak isteyebilirsiniz. Bunun için projeyi eski klasörden farklı bir klasörde oluşturmanız gerekir. Farklı bir ad seçerseniz, oluşturulan kod dosyalarındaki ad alanı adını güncelleştirebilirsiniz.

  2. Projeyi kapatın.

  3. Windows 8.1 bileşeninizdeki tüm kod dosyalarını (.cpp, .h, .xaml vb.) yeni oluşturduğunuz projeye kopyalayın. Package.appxmanifest dosyasını kopyalamayın.

  4. Windows SDK'nın farklı sürümleri arasındaki hataya neden olan değişikliklerden kaynaklanan hataları derleyin ve çözün.

Sorun giderme

Kodu UWP'ye taşıma işlemi sırasında çeşitli hatalarla karşılaşabilirsiniz. Karşılaşabileceğiniz olası sorunlardan bazıları aşağıdadır.

Proje Yapılandırma Sorunları

Şu hatayı alabilirsiniz:

could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable

Bu durumda, proje Bir Windows Evrensel projesi olarak derlenmiyor. Proje dosyasını denetleyin ve bir projeyi Windows Evrensel Projesi olarak tanımlayan doğru XML öğelerine sahip olduğundan emin olun. Aşağıdaki öğelerin mevcut olması gerekir (hedef platformun sürüm numarası farklı olabilir):

<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion>10.0.10156.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.10156.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>

Visual Studio kullanarak yeni bir UWP projesi oluşturduysanız bu hatayı görmemeniz gerekir.

Ayrıca bkz.

Visual C++ Taşıma Kılavuzu
Evrensel Windows Platformu (UWP) için uygulama geliştirme