Macros de configuración de C++/WinRT

En este tema se describen las macros de configuración de C++/WinRT. A menos que se indique lo contrario, estas reglas se aplican a todas las macros de configuración de C++/WinRT:

  • Todos los archivos que están vinculados entre sí para formar un único módulo (.exe o .dll) deben tener una configuración de macro idéntica. Esto incluye las bibliotecas estáticas.
  • Toda la configuración de macro debe completarse antes de incluir cualquier archivo de encabezado de C++/WinRT.
  • No puede cambiar ninguna configuración de macro después de incluir un archivo de encabezado de C++/WinRT.

WINRT_LEAN_AND_MEAN

Si se define, deshabilita estas características que rara vez se usan (con el fin de reducir los tiempos de compilación):

  • La posibilidad de implementar interfaces exclusivas fuera del componente.
  • Especializaciones std::hash para punteros inteligentes de interfaz y clase en tiempo de ejecución.
  • Compatibilidad con la salida directa de un hstring o IStringable en una secuencia de C++, desde la versión 2.0.221101.3.

Puede combinar archivos con diferentes configuraciones para WINRT_LEAN_AND_MEAN.

Los archivos que no definen como WINRT_LEAN_AND_MEAN obtienen acceso a las características que se usan con poca frecuencia.

WINRT_NO_MODULE_LOCK

Si se define, deshabilita los recuentos de objetos para el módulo actual. El módulo nunca se descarga del proceso. La definición de esta macro es habitual para los ejecutables (que nunca se pueden descargar) o para bibliotecas .dll que quiera dejar ancladas. No se puede combinar con WINRT_CUSTOM_MODULE_LOCK.

WINRT_CUSTOM_MODULE_LOCK

Si se define, le permite proporcionar su propia implementación de winrt::get_module_lock. No se puede combinar con WINRT_NO_MODULE_LOCK.

La implementación personalizada de winrt::get_module_lock debe admitir las siguientes operaciones:

  • ++winrt::get_module_lock(): incrementar el recuento de referencias en el bloqueo del módulo.
  • --winrt::get_module_lock(): disminuir el recuento de referencias en el bloqueo del módulo.
  • if (winrt::get_module_lock()): comprobar si el recuento de referencias es distinto de cero. (Necesario si va a compilar un archivo DLL).

WINRT_ASSERT, WINRT_VERIFY

Estas macros permiten personalizar el control de aserciones. WINRT_ASSERT no requiere que se evalúe el argumento. WINRT_VERIFY requiere que se evalúe el argumento, incluso en compilaciones que no son de depuración.

Si no personaliza estas macros y se define _DEBUG, C++/WinRT las convierte en equivalentes a _ASSERTE.

Si no personaliza estas macros y no se define _DEBUG, C++/WinRT define WINRT_ASSERT para descartar la expresión sin evaluar y define WINRT_VERIFY para descartar la expresión después de evaluarla.

WINRT_NO_MAKE_DETECTION

Si se define, deshabilita el diagnóstico predeterminado de C++/WinRT que detecta que ha construido erróneamente una clase de implementación sin usar winrt::make.

Se recomienda encarecidamente no definir este símbolo, ya que al hacerlo se enmascara una fuente habitual de errores de programación.

WINRT_DIAGNOSTICS

Si se define, permite que las estadísticas internas realicen un seguimiento de varias operaciones:

  • Número de veces que se ha consultado cada interfaz.
  • Número de veces que se solicitó cada factoría (y si la factoría es ágil).

WINRT_NATVIS

Si se define, incluye funciones auxiliares para ayudar en las visualizaciones de depuración nativas en Visual Studio. El código no se usa en tiempo de ejecución, solo existe para la depuración.

Si no personaliza esta macro, las funciones de compatibilidad de visualización se habilitan si se define _DEBUG. Para más información, consulte Visualización de depuración nativa de Visual Studio (natvis) para C++/WinRT.

Puede combinar archivos con diferentes configuraciones para WINRT_NATVIS.

Si algún archivo se compila con compatibilidad WINRT_NATVIS, el módulo resultante tendrá habilitadas las visualizaciones de depuración nativas.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

No use estas macros.