Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Project Modern C++
AKA
« cppwinrt »
Raffaele Rialdi
@raffaeler
raffaeler@vevy.com http://iamraf.net
Chi sono ...
▪ Professionalmente ho cominciato nel lontano 1987
▪ Nel 2003 ho ricevuto il mio primo Award MVP (a Ottobre h...
Il problema del contratto binario
▪ C++ non ha mai definito un contratto binario
▪ Nel linguaggio C esistono convenzioni c...
Windows Runtime Architecture
Metro apps Desktop apps
Windows Runtime APIs e Servizi
Win32
Language Projections
.NET / Js /...
La Abstract Binary Interface (ABI) del Windows Runtime
▪ Definita secondo le vecchie regole COM
▪ Le implementazioni o "Cl...
WRL
Windows Runtime Template Library
▪ È la libreria più di basso livello
▪ È una evoluzione della vecchia ATL (Active Tem...
Le Projection
▪ Le projection sono un artefatto che semplificano l'accesso alle Classi
▪ Esempi:
▪ Esporre una sintassi ch...
Modern Cpp
cppwinrt
▪ È un progetto creato da Kenny Kerr, ex-MVP canadese
▪ Oggi lavora nella divisione Windows e il proge...
Configurazioni del progetto Win32 (non UWP)
Necessario per le API Win32 del Windows Runtime
Folder con cppwinrt
Config per...
Mixare C++/CX e C++WinRT
▪ Due motivi per volerlo vare
▪ Aggiungere codice ad una codebase esistente
▪ Usare il markup XAM...
Codice!
Domande?
Grazie!
Próxima SlideShare
Cargando en…5
×

Project modern c++ (ITA)

408 visualizaciones

Publicado el

Presenting Modern C++ AKA cppwinrt
Demos:
https://github.com/raffaeler/cppwinrt_demo1
https://github.com/raffaeler/cppwinrt_demo2

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Project modern c++ (ITA)

  1. 1. Project Modern C++ AKA « cppwinrt » Raffaele Rialdi @raffaeler raffaeler@vevy.com http://iamraf.net
  2. 2. Chi sono ... ▪ Professionalmente ho cominciato nel lontano 1987 ▪ Nel 2003 ho ricevuto il mio primo Award MVP (a Ottobre ho ricevuto il mio 14-esimo) ▪ La prossima settimana sarò al MVP Summit a Redmond ▪ Sono un Senior Software Architect ▪ Lavoro sia come consulente e gestisco la software division di Vevy Europe ▪ Lavoro in molti progetti divertenti e speciali: ▪ Financial, Racing, Manufacturing, ... ▪ Sono speaker e docente in corsi sulla programmazione da quasi 15 anni ▪ Sia in Italia che all’estero
  3. 3. Il problema del contratto binario ▪ C++ non ha mai definito un contratto binario ▪ Nel linguaggio C esistono convenzioni come stdcall, cdecl, fastcall ▪ La necessità di metadati ▪ Tanto tempo fa nacque IDL usato da Corba e COM ▪ Più tardi la versione successiva di COM, conosciuta come .NET definisce ECMA-335 ▪ Nel 2011 escono le "Modern Apps" aka Windows Runtime Apps 1. Evoluzione del mondo COM (con regole più semplici) 2. Type system nuovo 3. Ri-uso dei metadati ECMA-335
  4. 4. Windows Runtime Architecture Metro apps Desktop apps Windows Runtime APIs e Servizi Win32 Language Projections .NET / Js / C++ XAML DirectX HTML HTMLWPF SL Win form MFC DX .NET / Js / C++ Windows Kernel Services Win32 XAML Pickers …Network UI Controls MediaStorage Windows Metadata Windows Runtime Core Runtime Broker Accesso parziale a WinRT BCL / libraries
  5. 5. La Abstract Binary Interface (ABI) del Windows Runtime ▪ Definita secondo le vecchie regole COM ▪ Le implementazioni o "Classi" sono solo esposte come interfacce ▪ Sono esposte come "ClassId" ("full qualified name" al posto dei vecchi guid) ▪ Espongono almeno 2 interfacce, identificate come IID (guid) ▪ Le interfacce esposte da tutte le classi sono: ▪ IUnknown: QueryInterface, AddRef e Release ▪ IInspectable: GetIIds, GetRuntimeClassName e GetTrustLevel ▪ Permettono di scoprire dinamicamente cosa espone la Classe (metadati!) ▪ Per chi la ricorda, è una evoluzione della vecchia IDispatch
  6. 6. WRL Windows Runtime Template Library ▪ È la libreria più di basso livello ▪ È una evoluzione della vecchia ATL (Active Template Library) di COM ▪ Molto più leggera e "semplice" ▪ Fornisce alcune classi di base come HString ▪ Wrapper di HSTRING e relative API ▪ Si, WinRT è la n-esima implementazione delle stringhe in C++ :) ▪ ComPtr è lo smart pointer che gestisce il ciclo di vita degli oggetti ▪ Vediamo il codice!
  7. 7. Le Projection ▪ Le projection sono un artefatto che semplificano l'accesso alle Classi ▪ Esempi: ▪ Esporre una sintassi che accede a classi (ma in realtà avviene per interfacce) ▪ Far corrispondere alla costruzione della classe una attivazione tramite API di Windows ▪ Vantaggi: ▪ Sintassi semplificata ▪ Gestione (quasi) automatica del ciclo di vita degli oggetti tramite AddRef / Release ▪ Microsoft ha già creato diverse projection ▪ C++/CX è uno "slang" di C++ che genera i wrapper che realizzano la projection ▪ Il Framework.NET fruisce di una projection per tutti i linguaggi managed ▪ CCW e RCW "trasformano" il ciclo di vita del GC in AddRef e Release
  8. 8. Modern Cpp cppwinrt ▪ È un progetto creato da Kenny Kerr, ex-MVP canadese ▪ Oggi lavora nella divisione Windows e il progetto è diventato di Microsoft ▪ Tutto il sorgente (esempi a parte) è stato prodotto da un generatore ▪ Le pull-request sul progetto non sono possibili per questo motivo ▪ Il generatore processa i file WinMD (in formato ECMA-335) e gli 'include' ▪ Il formato ECMA-335 è ispezionabile tramite Reflector / ILSpy / … ▪ È sufficiente referenziare le include ▪ Non ci sono "Lib" https://github.com/microsoft/cppwinrt #include "winrtbase.h" #include "winrtWindows.Foundation.h" #include "winrtWindows.Web.Syndication.h"
  9. 9. Configurazioni del progetto Win32 (non UWP) Necessario per le API Win32 del Windows Runtime Folder con cppwinrt Config per VC++2015
  10. 10. Mixare C++/CX e C++WinRT ▪ Due motivi per volerlo vare ▪ Aggiungere codice ad una codebase esistente ▪ Usare il markup XAML (in futuro Modern supporterà direttamente XAML) ▪ Setup come da template ma con solo ▪ Nel file pch.h aggiungere questa #define ▪ Evitare le ambiguità nell'importazione dei namespace. Es: /bigobj /await /std:c++latest #define _HAS_AUTO_PTR_ETC 1 #include <collection.h> namespace cx { using namespace Windows::Foundation; using namespace Windows::Networking; } namespace winrt { using namespace Windows::Foundation; using namespace Windows::Networking; }
  11. 11. Codice!
  12. 12. Domande? Grazie!

×