C ++ / CX ve C ++ / CLI nedir ve bunlar C ++ ve WinRT ile nasıl ilgilidir?


31

Metro uygulamaları tasarlamak için C ++ öğrenme zorluğunu üstlenmeyi düşünüyordum ve o zaman C ++ / CX ile karşılaştım.

Metro uygulamaları C ++ 11 ile kodlanabilir mi? Çalışmak için C ++ / CX gerekli mi? Ve tam olarak C ++ / CX nedir? Yalnızca C ++ kullanarak Metro uygulaması oluşturmak mümkün mü, yoksa C ++ / CX gerekli mi? Ayrıca, C ++ / CLI bu resme nasıl bağlanır?


Ayrıca C ++ / CX kullanımı şu anda önerilmez (C ++ / WinRT tercih edilir), şu belgelere
SWdV

Yanıtlar:


28

Microsoft, Windows API'larına (win32 adı verilen) erişmenizi sağlayan bir C ++ sistemi kullanıyordu, bir gün .NET'i icat ettiler ve her şeyin değişmesi gerektiğini düşündüler.

Onlar gibi anahtar kelimeler ekleyerek, temelde C olan "C ++ için Yönetilen Uzantılar" ++ ama standart dışı uzantıları bir yük ile oluşturulan Yani __gc(yerli bir yerine GC yığın ayırmak gibi) desteği .NET özelliklerine

Ancak, insanlar bundan çok hoşlanmıyorlardı; t C ++, tüm bu ekstra anahtar kelimelere sahipti, bu yüzden Microsoft, onu yeniden tasarladı ve çok daha küçük bir ek anahtar kelime kümesi olan ancak ^şu gibi sözdizimi değişiklikleri getirdi : GC öbekindeki bir .NET nesnesine bir referans 'işaretçi').

Birkaç yıl sonra Microsoft, .NET’in söylediği gümüş kurşun olmadığını fark etti ve savaşçı Windows ve Geliştirici ekiplerini birleştirdi. Bu yeniden değerlendirmenin bir kısmı, tamamen yerel kod olan WinRT adlı yepyeni bir Windows API oluşturulmasına neden oldu ve bu eski uzantıların artık kullanışlı olmadığı anlamına geliyordu, bu nedenle Microsoft, C ++ uzantılarını yeni sürümle çalışarak geliştirdi. WinRT API'si daha kolay - C ++ / CLI'dan (^ gibi) bir kaç uzantı alarak.

Yani - işte, yüzeysel olarak C ++ olan genişletilmiş bir C ++ 'ın 3 farklı sürümü. En azından en son sürüm yine yerel koddur, bu nedenle doğrudan API'ye erişebilmeyi istemiyorsanız, uzantıları kullanmanıza gerek yoktur (WRL olarak adlandırılır ve eski ATL şablon sınıfları gibidir)

İstemediğiniz platformlar arası kodları kodladığınızı düşünüyorsanız, API çağrılarını değiştirebilirsiniz, ancak ^Visual C ++ dışındaki herhangi bir derleyicide kullanamazsınız . WRL API'sini kullanmanızı ve C ++ / CX ile karşılaştırıldığında yazmanız gereken 'ekstra kod' verildiğinde kodunuzu mümkün olduğunca standart tutmanızı tavsiye ederim.


Not: C ++ / CX, sonuna kadar söz etmez; hangisinin paragrafında olduğunu açıkça söylemek güzel olurdu.
Acorn,

11

Alıntı : http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx :

. . . C ++ / CX, C ++ / CLI'ye sözdizimsel olarak benzese de, pek çok açıdan neredeyse aynı görünse de, anlamsal olarak oldukça farklıdır. C ++ / CX kodu yerel koddur, CLR gerekmez. C ++ / CLI'da programlama çok zor olabilir, çünkü aynı anda iki çok farklı nesne modelini ustaca çekiştirmek gerekir: deterministik nesne ömürleri ile C ++ nesne modeli ve çöp toplanan CLI nesne modeli. C ++ / CX ile çalışmak çok daha kolaydır, çünkü COM tabanlı Windows Runtime C ++ programlama diline çok iyi eşlenir.

Windows Çalışma Zamanı, nispeten basit, düşük seviyeli bir Uygulama İkili Arabirimi (ABI) tanımlar ve bileşenlerin ortak bir meta veri biçimi kullanarak türlerini tanımlamasını zorunlu kılar. C ++ / CX yerel bir Windows Runtime bileşeni yazmak için kesinlikle gerekli değildir: C ++ / CX dil uzantılarını kullanmadan Windows Runtime bileşenlerini C ++ kullanarak yazmak oldukça mümkündür ve Visual C ++ 2012 bir kitaplık içerir, Windows Runtime C ++ Şablon Kütüphanesi ( WRL), bunu kolaylaştırmak için. Windows'un bir parçası olarak gelen Windows Runtime bileşenlerinin çoğu (Windows ad alanında) WRL kullanılarak yazılmıştır. C ++ / CX'da sihir yok: sadece Windows Runtime bileşenlerini C ++ ile yazmayı çok daha basit hale getiriyor ve WRL gibi bir kütüphane tabanlı çözüm kullanırken yazmanız gereken tekrarlayan ve ayrıntılı kod miktarını azaltmaya yardımcı oluyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.