stringtranslate.com

Tiempo de ejecución de Windows

Windows Runtime ( WinRT ) es una arquitectura de aplicaciones y componentes independiente de la plataforma introducida por primera vez en Windows 8 y Windows Server 2012 en 2012. Está implementado en C++ y admite oficialmente el desarrollo en C++ (a través de C++/WinRT , C++/CX o WRL), Rust/WinRT , Python/WinRT , JavaScript - TypeScript y los lenguajes de código administrado C# y Visual Basic (.NET) (VB.NET).

WinRT no es un entorno de ejecución en el sentido tradicional, sino más bien una interfaz binaria de aplicación independiente del lenguaje basada en COM para permitir que las API orientadas a objetos se consuman desde múltiples lenguajes, con servicios generalmente proporcionados por un entorno de ejecución completo, como la activación de tipos. [1] Es decir, WinRT es un "sistema de entrega de API". Las aplicaciones que utilizan Windows Runtime pueden ejecutarse dentro de un entorno aislado para permitir una mayor seguridad y estabilidad y pueden soportar de forma nativa tanto x86 como ARM . [2] [3] Los componentes de WinRT están diseñados teniendo en cuenta la interoperabilidad entre múltiples lenguajes y API, incluidos los lenguajes nativos, administrados y de scripting. Las API integradas proporcionadas por Windows que utilizan la ABI de WinRT se conocen comúnmente como API de WinRT; sin embargo, cualquiera puede usar la ABI de WinRT para sus propias API.

Tecnología

WinRT se implementa en el lenguaje de programación C++ [4] y está orientado a objetos por diseño. [4] Su tecnología subyacente, la API de Windows (API Win32), está escrita principalmente en el lenguaje C. [5] Es una interfaz binaria de aplicación no administrada basada en el Modelo de objetos componentes (COM) que permite la interacción desde múltiples lenguajes, al igual que COM. Sin embargo, las definiciones de API se almacenan en archivos, que están codificados en formato de metadatos ECMA 335 , que .NET Framework también usa con algunas modificaciones. Para los componentes WinRT implementados en código nativo, el archivo de metadatos solo contiene la definición de métodos, clases, interfaces y enumeraciones y la implementación se proporciona en una DLL separada. [6] [7] [8] Este formato de metadatos común facilita el consumo de API de WinRT desde aplicaciones .NET con una sintaxis más simple que P/Invoke . [9] [ ¿ fuente no confiable? ] Windows proporciona un conjunto de API integradas que se basan en la ABI de WinRT y que proporcionan todo, desde la biblioteca WinUI basada en XAML y acceso a dispositivos como cámara, micrófono, etc..winmd

El lenguaje C++/CX (Extensiones de componentes) anterior, que toma prestada cierta sintaxis de C++/CLI , se introdujo para escribir y consumir componentes WinRT con menos código de unión visible para el programador, en relación con la programación COM clásica en C++, e impone menos restricciones en relación con C++/CLI en la mezcla de tipos. Las extensiones de componentes de C++/CX se recomiendan para su uso solo en el límite de la API, no para otros fines. [10] El C++ normal (con disciplina específica de COM) también se puede utilizar para programar con componentes WinRT, [11] con la ayuda de la biblioteca de plantillas C++ de Windows Runtime (WRL), que es similar en propósito a lo que proporciona la biblioteca de plantillas activas para COM. [12] En 2019, Microsoft desaprobó C++/CX a favor de la biblioteca de encabezados C++/WinRT . [13]

La mayoría de las aplicaciones WinRT se ejecutan en un entorno aislado y necesitan la aprobación explícita del usuario para acceder a funciones críticas del sistema operativo y al hardware subyacente. De manera predeterminada, el acceso a los archivos está restringido a varias ubicaciones predeterminadas, como los directorios Documentos o Imágenes. [14]

Las aplicaciones WinRT se empaquetan en el formato de archivo .appx y más tarde en el .msix ; basado en las Convenciones de Empaquetado Abierto , utiliza un formato ZIP con archivos XML agregados. [15] Las aplicaciones WinRT se distribuyen principalmente a través de una tienda de aplicaciones llamada Microsoft Store , donde los usuarios pueden comprar y descargar aplicaciones de Windows (denominadas aplicaciones de Windows Store ). Inicialmente, las aplicaciones WinRT solo se podían cargar desde fuera de Windows Store en sistemas Windows 8 o RT que son parte de un dominio de Windows , o equipados con una clave de activación especial obtenida de Microsoft. [16] [17] [18] [19] Sin embargo, estas restricciones se levantaron en la Actualización de noviembre de Windows 10, donde los usuarios pueden cargar libremente cualquier aplicación firmada con un certificado de confianza habilitando una configuración. [20]

En una desviación importante de Win32 y de manera similar a .NET Framework 4.5 , la mayoría de las API que se espera que tarden un tiempo significativo en completarse se implementan como asincrónicas. Al llamar a una función asincrónica de Windows Runtime, la tarea se inicia en otro hilo o proceso y la función regresa inmediatamente, liberando a la aplicación para realizar otras tareas mientras espera los resultados. [21] El modelo asincrónico requiere nuevas construcciones de lenguaje de programación. Cada lenguaje proporciona su propia forma de consumir API asincrónicas. Las partes de la API incorporada que necesitan acceso asincrónico incluyen mensajes y cuadros de diálogo en pantalla, acceso a archivos, conectividad a Internet, sockets, transmisiones, dispositivos y servicios, y calendario, contactos y citas.

Servicios

Metadatos

Los metadatos describen las API escritas con la ABI de WinRT. Definen un modelo de programación que permite escribir código orientado a objetos que se puede compartir entre lenguajes de programación y habilita servicios como la programación reflexiva (reflexión).

Herb Sutter , experto en C++ de Microsoft , explicó durante su sesión sobre C++ en la conferencia Build 2011 que los metadatos de WinRT tienen el mismo formato que los metadatos de CLI . [10] El código nativo (es decir, el código de máquina específico del procesador) no puede contener metadatos, por lo que se almacena en un archivo de metadatos separado que se puede reflejar como ensambles CLI ordinarios . [22] Dado que es el mismo formato que los metadatos de CLI, las API de WinRT se pueden usar desde lenguajes CLI administrados como si fuera solo una API .NET.

Sistema de tipos

WinRT tiene un sistema de tipos basado en clases y orientado a objetos que se basa en metadatos. Admite construcciones con construcciones correspondientes en el marco .NET: clases , métodos , propiedades , delegados y eventos .

Una de las principales adiciones a WinRT en relación con COM es la interfaz binaria entre aplicaciones (ABI), genéricos de estilo .NET . Solo las interfaces y los delegados pueden ser genéricos, las clases de tiempo de ejecución y los métodos en ellos no pueden. Las interfaces genéricas también se conocen como interfaces parametrizadas. En C++/CX, se declaran utilizando la palabra clave genericcon una sintaxis muy similar a la de keyword template. Las clases WinRT (clases de referencia) también se pueden genericizar utilizando plantillas C++, pero solo las instancias de plantilla se pueden exportar a metadatos .winmd (con algo de alteración de nombres ), a diferencia de los genéricos WinRT que conservan su genericidad en los metadatos. WinRT también proporciona un conjunto de interfaces para contenedores genéricos que son paralelos a los de la biblioteca estándar de C++ , y los lenguajes proporcionan algunas funciones de conversión recíproca (de ida y vuelta). El consumo de colecciones WinRT en lenguajes .NET (por ejemplo, C# y VB) y en JavaScript es más transparente que en C++, con asignaciones automatizadas en sus equivalentes naturales que ocurren detrás de escena. Al crear un componente WinRT en un lenguaje administrado, se deben seguir algunas reglas adicionales de estilo COM, por ejemplo, los tipos de colección del marco .NET no se pueden declarar como tipos de retorno, sino que solo las interfaces WinRT que implementan se pueden usar en el límite del componente.

Componentes de WinRT

Las clases que se compilan para apuntar a WinRT se denominan componentes WinRT . Son clases que se pueden escribir en cualquier lenguaje compatible y para cualquier plataforma compatible. La clave son los metadatos. Estos metadatos hacen posible la interacción con el componente desde cualquier otro lenguaje WinRT. El entorno de ejecución requiere que los componentes WinRT que se compilan con .NET Framework utilicen los tipos de interfaz definidos o las interfaces de tipo .NET, que se asignan automáticamente a la primera nombrada. La herencia aún no se admite en los componentes WinRT administrados, excepto para las clases XAML. [23]

Interfaces de programación

Los programas y bibliotecas destinados al entorno de ejecución de WinRT se pueden crear y utilizar desde varias plataformas y lenguajes de programación. En particular, C / C++ (ya sea con extensiones de lenguaje que ofrecen compatibilidad de primera clase con los conceptos de WinRT o con una biblioteca de plantillas de nivel inferior que permite escribir código en C++ estándar), .NET ( C# y Visual Basic (.NET) (VB.NET)) y JavaScript . Esto es posible gracias a los metadatos. En la terminología de WinRT, un enlace de lenguaje se denomina proyección de lenguaje.

C++ (C++/WinRT, extensiones de componentes, WRL)

El C++ estándar es un ciudadano de primera clase de la plataforma WinRT. A partir de Windows 10, versión 1803, el SDK de Windows contiene C++/WinRT. C++/WinRT es una proyección de lenguaje C++17 completamente estándar y moderna para las API de Windows Runtime (WinRT), implementada como una biblioteca basada en archivos de encabezado y diseñada para proporcionar acceso de primera clase a la API de Windows moderna. Con C++/WinRT, las API de Windows Runtime se pueden crear y consumir utilizando cualquier compilador de C++17 compatible con los estándares. WinRT es una plataforma nativa y admite cualquier código C++ nativo (y estándar), de modo que un desarrollador de C++ puede reutilizar las bibliotecas nativas de C/C++ existentes. Con C++/WinRT, no hay extensiones de lenguaje.

Existen otras dos opciones heredadas para usar WinRT desde C++: Windows Runtime C++ Template Library (WRL), una biblioteca de plantillas de estilo ATL (similar a Windows Template Library o WTL), y C++/CX (C++ con extensiones de componentes) que se parece a C++/CLI. [24] Debido a los requisitos de consumo interno de Microsoft, WRL no tiene excepciones, lo que significa que su disciplina de valor de retorno está basada en HRESULT al igual que la de COM. [25] Por otro lado, C++/CX envuelve las llamadas a WinRT con código que realiza la verificación de errores y lanza excepciones según corresponda. [26]

C++/CX tiene varias extensiones que permiten la integración con la plataforma y su sistema de tipos. La sintaxis se parece a la de C++/CLI, aunque produce código nativo (aunque no estándar) y metadatos que se integran con el entorno de ejecución. Por ejemplo, los objetos WinRT pueden asignarse con ref new, que es el equivalente de gcnewde C++/CLI. El operador hat ^conserva su significado, sin embargo, en el caso en que tanto el llamador como el llamador estén escritos en C++ y vivan en el mismo proceso, una referencia hat es simplemente un puntero a un vptr a una tabla de métodos virtuales (vtable, VMT). [26]

Junto con C++/CX, en relación con la programación COM tradicional de C++, existen clases parciales , nuevamente inspiradas en .NET. Estas permiten que el código XAML de WinRT de instancia se traduzca a código C++ mediante herramientas y luego se combine con código escrito por humanos para producir la clase completa, al tiempo que se permite una separación clara de las partes generadas por la máquina y editadas por humanos de una implementación de clase en diferentes archivos.

.NETO

El .NET Framework y el Common Language Runtime (CLR) están integrados en WinRT como una subplataforma. Ha influido y establecido los estándares para el ecosistema a través del formato de metadatos y las bibliotecas. El CLR proporciona servicios como código de compilación JIT y recolección de basura . Las aplicaciones WinRT que utilizan lenguajes .NET utilizan WinUI basado en XAML y están escritas principalmente en C#, VB.NET y, por primera vez para XAML, con código nativo que utiliza C++/CX. Aunque todavía no se admite oficialmente, los programas también se pueden escribir en otros lenguajes .NET. Con .NET 5, Microsoft eliminó el soporte integrado de WinRT y en su lugar creó CsWinRT, una herramienta que genera código de interoperabilidad para acceder a las API de Windows Runtime de manera similar a cómo funciona C++/WinRT. [27] [28]

Limitaciones

Las clases definidas en componentes WinRT que se crean en lenguajes .NET administrados deben declararse como sealed, por lo que no se pueden derivar de ellas. Sin embargo, las clases WinRT no selladas definidas en otro lugar se pueden heredar de .NET, sus métodos virtuales se pueden anular, etc.; pero la clase administrada heredada aún debe estar sellada.

Los miembros que interactúan con otro lenguaje deben tener una firma con tipos WinRT o un tipo administrado que sea convertible a estos. [23]

JavaScript

Las aplicaciones WinRT también se pueden codificar usando HTML con JavaScript en código subyacente , que se ejecutan utilizando el motor de renderizado Trident y el motor de JavaScript Chakra , ambos utilizados también por Internet Explorer . Al codificar una aplicación WinRT en JavaScript, sus características se adaptan para seguir las convenciones de nombres de JavaScript y los espacios de nombres también se asignan a objetos de JavaScript.

Otros idiomas

Microsoft está en proceso de proyectar las API de WinRT a lenguajes distintos de C++. Un ejemplo es Rust/WinRT, una interfaz para que los programas escritos en Rust consuman y creen API de WinRT. [29] Rust/WinRT es parte de Windows App SDK (anteriormente Project Reunion), un esfuerzo de Microsoft para reconciliar el escritorio tradicional de Windows y el modelo de aplicación UWP. [30]

Puentes

Con la introducción de la Plataforma universal de Windows (UWP), la plataforma ha recibido muchos puentes API que permiten que los programas desarrollados originalmente para otras plataformas se puedan portar fácilmente mientras se aprovechan las características de UWP. Microsoft ha proporcionado puentes para Android (desaparecido desde 2016), iOS ( Cocoa Touch ), Progressive Web Apps , Silverlight , así como las aplicaciones de escritorio tradicionales de Windows (que utilizan el empaquetado MSIX del Windows App SDK ).

API

WinRT incluye una interfaz de programación de aplicaciones (API) en forma de biblioteca de clases que expone las características de Windows 8 para el desarrollador, como su API de interfaz inmersiva. Es accesible y utilizable desde cualquier lenguaje compatible.

Clases de tiempo de ejecución

Las clases de Windows Runtime son un conjunto de SDK que brindan acceso a todas las funciones, desde el analizador XAML hasta la función de cámara. Los SDK se implementan como bibliotecas nativas de C/C++ (no administradas).

Convenciones de nombres

Las convenciones de nombres para los componentes (clases y otros miembros) en la API están fuertemente influenciadas por las convenciones de nombres de .NET que utilizan CamelCase (específicamente PascalCase). Microsoft recomienda a los usuarios que sigan estas reglas en caso de que no se indiquen otras.

Estas convenciones se proyectan de forma diferente en algunos lenguajes, como JavaScript, que las convierte a sus convenciones y viceversa. Esto es para brindar una experiencia nativa y consistente independientemente del lenguaje de programación.

Restricciones y reglas

Dado que Windows Runtime está diseñado para varios lenguajes, existen algunas restricciones sobre los tipos de datos fundamentales para poder alojar todos esos lenguajes. Los programadores deben tener cuidado con el comportamiento de esos tipos cuando se utilizan con acceso público (para parámetros de métodos, valores de retorno de métodos, propiedades, etc.). [31]

Tipos básicos
En los lenguajes .NET y C++, existe un amplio conjunto de tipos de datos que representan varios numerales.
En JavaScript, a Numbersolo puede representar hasta 53 bits de precisión.
En WinRT, el único tipo de datos numérico que falta es el entero con signo de 8 bits en relación con .NET y C++. Los desarrolladores de JavaScript deben tener cuidado al trabajar con números grandes al codificar para WinRT.
Instrumentos de cuerda
Las cadenas son inmutables en .NET y JavaScript, pero mutables en C++.
Un puntero nulo pasado como cadena a WinRT por C++ se convierte en una cadena vacía
En .Net, el valor nulo que se pasa como cadena a WinRT se convierte en una cadena vacía
En JavaScript, el valor null que se pasa como cadena a WinRT se convierte en una cadena con la palabra null. Esto se debe a que la palabra clave de JavaScript nullse representa como un objeto null. Se producen resultados similares cuando se pasa undefineda WinRT desde JavaScript.
Estructuras
En .NET y C++, las estructuras son tipos de valores, y una estructura de este tipo puede contener cualquier tipo.
JavaScript no admite estructuras directamente.
En WinRT, el uso de estructuras solo está permitido para contener tipos que tengan semántica de valor, incluidos números, cadenas y otras estructuras. No se permiten punteros ni referencias de interfaz.
Referencias
En .NET, los objetos se pasan por referencia, mientras que los numerales y las estructuras se pasan por valor.
En C++, todos los tipos se pueden pasar por referencia o valor.
En WinRT, las interfaces se pasan por referencia; todos los demás tipos se pueden pasar por valor o por referencia. [2]
Matrices
En .NET, C++ y JavaScript, las matrices son tipos de referencia.
En WinRT, las matrices son tipos de valores y bastante restringidos.
Eventos
En .NET y C++, los clientes se suscriben a eventos mediante +=el operador.
En JavaScript, addEventListenerla función o on<EventName>propiedad de configuración se utiliza para suscribirse a eventos.
En WinRT, todos los lenguajes pueden usar su propia forma de suscribirse a eventos.
Colecciones
Algunas colecciones .NET se asignan directamente a colecciones WinRT.
El tipo Vector de WinRT se parece a las matrices y la sintaxis de matriz se utiliza para consumirlos.
El tipo de mapa WinRT es una colección de pares clave/valor y se proyecta como diccionario en los lenguajes .NET.
Sobrecarga de métodos
Todos los lenguajes WinRT (.NET, C++, JavaScript) admiten la sobrecarga de parámetros
.NET y C++ también admiten la sobrecarga de tipos.
En WinRT, solo se utiliza el número de parámetro para la sobrecarga.
Asincronía
Todos los métodos de WinRT están diseñados de tal manera que cualquier método que tarde más de 50 milisegundos es un método asincrónico.
El patrón de nombres establecido para distinguir los métodos asincrónicos es <Verb>[<Noun>]Async. Para la biblioteca de tiempo de ejecución completa, todos los métodos que tienen una probabilidad de durar más de 50 ms se implementan solo como métodos asincrónicos.

Tiempo de ejecución de Windows Phone

Windows Phone 8.1 utiliza una versión de Windows Runtime denominada Windows Phone Runtime . Permite desarrollar aplicaciones en C# y VB.NET, y componentes de Windows Runtime en C++/CX. [32] Aunque WP8 trajo soporte limitado, la plataforma finalmente convergió con Windows 8.1 en Windows Phone 8.1 .

Teléfono Windows 8

Windows Phone 8 tiene un soporte limitado para desarrollar y consumir componentes de Windows Runtime a través de Windows Phone Runtime . Muchas de las API de Windows Runtime en Windows 8 que manejan funciones centrales del sistema operativo han sido trasladadas a Windows Phone 8. [33] Se ha agregado soporte para desarrollar juegos nativos usando C++/CX y DirectX, a pedido de la industria de desarrollo de juegos.

Sin embargo, el marco XAML de Windows Phone todavía se basa en el mismo marco Microsoft Silverlight que en Windows Phone 7, por compatibilidad con versiones anteriores. Por lo tanto, a partir de 2016 , el desarrollo XAML es imposible en C++/CX. El desarrollo con HTML5 o WinJS no es compatible con Windows Phone 8.

Teléfono Windows 8.1

La compatibilidad de Windows Runtime en Windows Phone 8.1 converge con Windows 8.1. La versión incorpora una API completa de Windows Runtime a la plataforma, que incluye compatibilidad con WinRT XAML y enlaces de lenguaje para C++/CX y HTML5 - JavaScript . También hay un tipo de proyecto llamado Aplicaciones universales para permitir que las aplicaciones compartan código entre las versiones 8.1 de Windows Phone y Windows.

Se ha actualizado el marco Silverlight de Windows Phone 8. [¿ cuándo? ] Puede aprovechar algunas de las nuevas características de Windows Runtime.

Windows Phone Runtime utiliza el formato de paquete AppX de Windows 8, después de utilizar anteriormente Silverlight XAP .

Referencias

  1. ^ Zhang, Yi (15 de marzo de 2017). "Windows Runtime no es un Runtime". Blog de yizhang82 . Consultado el 14 de junio de 2021 .
  2. ^ ab Avram, Abel (21 de septiembre de 2011). "Detalles de diseño del entorno de ejecución de Windows". InfoQ .
  3. ^ Klug, Brian; Smith, Ryan (13 de septiembre de 2011). "Microsoft Build: Windows 8, una versión preliminar de la versión beta". AnandTech .
  4. ^ de Michael, Mayberry (2012). WinRT Revealed . Nueva York: Apress . pág. 3. ISBN 978-1-4302-4585-8.
  5. ^ "Creación de aplicaciones Win32 (C++)". MSDN . Microsoft . Consultado el 12 de enero de 2014 .
  6. ^ "Archivos de metadatos de Windows (WinMD)". Referencia de API para aplicaciones UWP. Microsoft Docs . Consultado el 20 de julio de 2019 .
  7. ^ De Icaza, Miguel (15 de septiembre de 2011). «WinRT desmitificado». Blog personal de Miguel de Icaza . Autopublicado . Consultado el 15 de enero de 2014 .
  8. ^ "Archivos WINMD bajo el capó". CodeProject . 15 de octubre de 2012 . Consultado el 14 de junio de 2021 .
  9. ^ "¿Cuál es la sobrecarga de serialización COM al llamar a la API WinRT desde C#?". Foro MSDN . Autopublicado . 20 de septiembre de 2011. Consultado el 15 de enero de 2014 .
  10. ^ ab "Uso de Windows Runtime desde C++ | Build2011 | Channel 9". Channel9.msdn.com. 14 de septiembre de 2011. Archivado desde el original el 12 de octubre de 2011. Consultado el 24 de abril de 2012 .
  11. ^ Sivakumar, Nish (29 de septiembre de 2011). "Visual C++ y WinRT/Metro: algunos conceptos básicos - CodeProject®". Codeproject.com . Consultado el 24 de abril de 2012 .
  12. ^ "Uso de Windows Runtime desde C++ | Build2011 | Channel 9". Channel9.msdn.com. 14 de septiembre de 2011. Archivado desde el original el 12 de octubre de 2011. Consultado el 24 de abril de 2012 .
  13. ^ "Introducción a C++/WinRT: aplicaciones UWP de Windows". docs.microsoft.com . Microsoft.
  14. ^ lastnameholiu. "Permisos de acceso a archivos - Aplicaciones UWP". docs.microsoft.com . Consultado el 8 de agosto de 2020 .
  15. ^ "Diseño de un paquete de aplicaciones simple y seguro: APPX". Blog para desarrolladores de aplicaciones de Windows 8. Consultado el 30 de diciembre de 2013 .
  16. ^ "Cómo agregar y quitar aplicaciones". TechNet . Microsoft. 31 de mayo de 2012 . Consultado el 4 de octubre de 2012 . Para habilitar la instalación local en un equipo con Windows 8 Enterprise que no esté unido a un dominio o en cualquier equipo con Windows® 8 Pro, debe usar una clave de activación de producto de instalación local. Para habilitar la instalación local en un dispositivo con Windows® RT, debe usar una clave de activación de producto de instalación local. Para obtener más información sobre la instalación local de claves de activación de producto, consulte Licencias por volumen de Microsoft.
  17. ^ "Windows 8: El caos del Metro". PC Magazine. Archivado desde el original el 18 de noviembre de 2018. Consultado el 8 de septiembre de 2012 .
  18. ^ "Microsoft ahora utiliza el 'Estilo de interfaz de usuario moderna' para referirse a las aplicaciones de 'Estilo Metro' de Windows 8" . Consultado el 10 de agosto de 2012 .
  19. ^ "¿Qué es una aplicación de Microsoft Store?". Centro de desarrollo de Windows . Consultado el 1 de octubre de 2012 .
  20. ^ "¿Qué es la carga lateral y cómo cargar aplicaciones en Windows 10? [DETALLES]". Silicophilic . 27 de julio de 2019 . Consultado el 14 de junio de 2021 .
  21. ^ "Programación asincrónica (aplicaciones de la Tienda Windows)". MSDN . Microsoft . Consultado el 12 de enero de 2014 .
  22. ^ ".NET obtiene una nueva oportunidad de vida". Archivado desde el original el 24 de septiembre de 2011 . Consultado el 16 de septiembre de 2011 .
  23. ^ ab "Uso de Windows Runtime desde C# y Visual Basic | Build2011 | Channel 9". Channel9.msdn.com. 14 de septiembre de 2011. Consultado el 24 de abril de 2012 .
  24. ^ "Dentro del diseño de C++/CX - Blog del equipo de Visual C++ - Página principal del sitio - Blogs de MSDN". Blogs.msdn.com. 20 de octubre de 2011. Consultado el 24 de abril de 2012 .
  25. ^ Charles (26 de octubre de 2011). "GoingNative 3: The C++/CX Episode with Marian Luparu | C9::GoingNative | Channel 9". Channel9.msdn.com. Archivado desde el original el 7 de mayo de 2012. Consultado el 24 de abril de 2012 .
  26. ^ ab Bajo las sábanas con C++ para aplicaciones estilo Metro con Deon Brewis en //Build
  27. ^ "CSWinRT: Cómo llamar a las API de Windows WinRT desde aplicaciones .NET5". TECHCOMMUNITY.MICROSOFT.COM . 22 de septiembre de 2020 . Consultado el 14 de junio de 2021 .
  28. ^ Mayberry, Michael (2012), "Creación de una aplicación .NET con WinRT", WinRT Revealed , Berkeley, CA: Apress, págs. 29-46, doi :10.1007/978-1-4302-4585-8_3, ISBN 978-1-4302-4584-1, consultado el 14 de junio de 2021
  29. ^ "microsoft/winrt-rs". GitHub . 28 de septiembre de 2021.
  30. ^ "microsoft/WindowsAppSDK: Windows App SDK ofrece a todas las aplicaciones de escritorio de Windows una interfaz de usuario, API y funciones de plataforma modernas de Windows, incluida la compatibilidad con versiones anteriores, que se entregan a través de NuGet". GitHub . Consultado el 12 de octubre de 2021 .
  31. ^ "Diez consejos para escribir una aplicación de estilo Metro con lenguaje híbrido - Build2011 - Canal 9". Canal 9 . Microsoft.
  32. ^ "Referencia de la API de Windows Phone". Referencia de la API de Windows Phone . Microsoft . 21 de julio de 2014.
  33. ^ "API de tiempo de ejecución de Windows Phone". microsoft.com . Microsoft.

Enlaces externos