6

Bir C++ kitaplığımız var ve UWP'yi desteklemek için birkaç istek aldık. Şimdi limanı araştırıyorum. Visual Studio 2015 için Microsoft'un C/C++ Preprocessor Reference | Predefined Macros'u arıyorum, ancak UWP ile ilgili hiçbir şey göremiyorum.Önişlemci tanımları?

Ben How to: Use Existing C++ Code in a Universal Windows Platform App buldum ama o Metro UI uygulamaları için eski tanımlayıp benziyor:

  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  • WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

Ben beklediğiniz geç belirli bir şey görmek için Windows Çalışma Zamanı'nın yinelenmesi. Ben biz _WIN32_WINNT_WIN10 aracılığıyla Windows'u 10 ve UWP algılamak mümkün olabilir düşündüm ama doğru MSDN'den Using the Windows Headers ayrıştırma ediyorsam değil böyle bir makro görünür orada yok. Ayrıca, bazı API'lerin (yani Windows Phone 8, Windows Mağaza 8, Windows 10 ve Windows Mağazası 10) bulunmadığını saptamamız gerekecek şekilde some APIs are only available for Windows 10 and UWP Windows Store apps numaralı telefon numarasını da .

UWP'yi algılamak için kullanılan önişlemci makroları nelerdir?


İlgili bir soru Detect Windows Kit 8.0 and Windows Kit 8.1 SDKs olabilir, ama şu an emin değilim.

cevap

5

Sözünü ettiğiniz makrolar Windows 8'e kadar uzanabilir, ancak sunucu uygulamaları ve sürücüleri için birkaç eklentiyle, bunlar hala Evrensel Windows uygulamaları için kullanılanlardır.

UWP'ye özgü Visual C++ derleyicisine önceden tanımlı makrolar bulunmadığını unutmayın. UWP lezzetleri için tüm makrolar, Windows 10 SDK ile birlikte gelen winapifamily.h başlığında tanımlanmıştır. SDK'nın bir parçası olarak yüklenen paylaşılan dosya dizininde bulabilirsiniz; örneğin, C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared\winapifamily.h, yükleme sürücünüzün ve SDK sürümünüzü değiştirin.

winapifamily.h'daki yorumlar kapsamlıdır ve bu makrolar için ihtiyacınız olan her kullanım durumunu açıklamak için iyi bir iş çıkarır. Koşullu derleme için bunları kullanabilir veya işlev bildirimleri üzerinde _WINAPI_DEPRECATED_DECLARATION kullanarak UWP'ye uymayan kod için kullanım dışı bırakma uyarıları ayarlayabilirsiniz.

düzenleme bir örnek eklemek için: Eğer winapifamily.h dahil ettikten sonra bu sürüme özgü bir şey yapmak için Windows SDK belirli bir versiyonunda tanımlanmış olan bir makro üzerinde geçiş yapabilirsiniz gelir kodunda

Bunu şöyle:

#include <winapifamily.h> 
    // ... 
#if defined (WINAPI_FAMILY_SYSTEM) 
    // WINAPI_FAMILY_SYSTEM is new to Windows 10, so do Windows 10-specific 
    // calls here 
#elif (WINAPI_PARTITION_APP == 1) 
    // This value is forced to 1 in Windows 8.1, but it's different in 
    // Windows 8.0 so make Windows 8.1-specific calls here 
#else 
    // Make Windows 8.0-specific calls here 
#endif 

Bu başlıklarında neler okuma dayalı SDK sürümü özel kodu yapmak için bir yol (bana göre denenmemiş) sadece bir tanesidir. Bu derleyici sürümden (_MSC_VER veya _MSC_VER_FULL olarak tanımlanmış) veya platform NTDDI_* değerlerinden bağımsızdır.

+0

Tamam, düzenlemeler iyi (maalesef, tekrar geri alamıyorum). Windows Phone 8 ve Windows Store 8'deki Bcrypt/CNG'nin olmaması, bu sorunun çözülmesi gereken bir problemdi ve gözlemlerinizin güzel bir şekilde çalışacağını düşünüyorum.Diğer soruda olduğu gibi, bunu test etmek için biraz zamana ihtiyacım var. Bir SSE2-> NEON portu üzerinde çalışıyorum, bu yüzden bu test için kırılmaya ihtiyacım var. Test etmek için bir iki hafta ver. – jww

+1

Bitmiş ürününüzün WACK'i de geçtiğinden emin olun - sahte bir mağaza projesi oluşturun, kitaplığınızı dahil edin, ardından Paketleri oluştur ve Uygulama Uyumluluk testlerini çalıştırmayı seçin. Bunu doğrulamak için Mağaza'ya herhangi bir şey göndermeniz gerekmez. –

+0

Bu, ilgili olabilir: [WINAPI_FAMILY_ONECORE_APP nedir?] (Http://stackoverflow.com/q/38288622) – jww