> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XGameRuntimeInitializeWithOptions

> XGameRuntimeInitializeWithOptions

# XGameRuntimeInitializeWithOptions

Esta API inicializa el entorno de ejecución del juego y toma un puntero a una estructura de opciones que puede modificar la forma en que se inicializa el entorno de ejecución. Aunque los juegos normalmente deben seguir utilizando el método existente [XGameRuntimeInitialize](/reference/system/xgameruntimeinit/functions/xgameruntimeinitialize), algunos motores de juego o middleware pueden necesitar una inicialización más configurable.

## Sintaxis

```cpp theme={null}
HRESULT XGameRuntimeInitializeWithOptions(
    _In_ const XGameRuntimeOptions* options
)  
```

### Parámetros

*options* \_In\_\
Tipo: XGameRuntimeOptions\*

Puntero a una estructura de opciones que puede modificar la forma en que se inicializa el entorno de ejecución.

### Valor devuelto

Tipo: [HRESULT](https://learn.microsoft.com/openspecs/windows_protocols/ms-erref/0642cb2f-2075-4469-918c-4441e69c548a)

Devuelve **S\_OK** si se realiza correctamente; de lo contrario, devuelve un código de error. Para obtener una lista de códigos de error, consulte [Códigos de error](/reference/errorcodes). Si la función falla porque no se encontró la biblioteca de Gaming Runtime (xgameruntime.dll), el valor devuelto se establece en **E\_GAMERUNTIME\_DLL\_NOT\_FOUND**.

## Comentarios

En el ejemplo siguiente se muestra cómo se puede usar un editor de juegos u otro middleware para cargar y ejecutar varios juegos en el mismo proceso. Se presupone el siguiente código externo:

* Una clase denominada "GameEngine" que toma la ruta de acceso a los archivos del juego e inicia el juego. Este es el mismo motor que usa en tiempo de ejecución el "reproductor" del motor de juego.
* Una instancia de esta clase se almacena como variable global en el editor y representa el juego actual.

El entorno de ejecución se puede inicializar con una configuración de juego diferente, como se muestra a continuación. También se puede volver a inicializar con una configuración de juego diferente después de anular la inicialización.

```cpp theme={null}
void StartGame(const char* gamePath) 
{ 
    // If there is an existing game running, shut it down 
    if (g_game.IsRunning()) 
    { 
        g_game.Stop() 
    } 
 
    // Initialize the runtime in this process for this path 
    std::string gameConfig(gamePath); 
    gameConfig.append(“\\MicrosoftGame.config”); 
    XGameRuntimeOptions options{}; 
    options.gameConfigSource = XGameRuntimeGameConfigSource::File; 
    options.gameConfig = gameConfig.c_str(); 
    THROW_IF_FAILED(XGameRuntimeInitializeWithOptions(&options)); 
 
    // Now launch the game normally. 
    GameEngine game; 
    game.Launch(gamePath); 
    g_game = std::move(game); 
} 
 

// Examples of Launch / Stop behavior in GameEngine 
void GameEngine::Stop() 
{ 
    // Disconnect all globals from the runtime, closing handles and removing event 
    // handlers 

    // Handle game shut down before uninitializing the runtime

    XGameRuntimeUninitialize(); 
} 

void GameEngine::Launch(const char* gamePath) 
{ 
    // Standard XGameRuntimeInitialize here is fine to call – it will adopt the 
    // GameConfig settings from the earlier XGameRuntimeInitializeWithOptions call. 

    XGameRuntimeInitialize(); 
    RunGame(gamePath); 
}
```

**Inicialización**\
El entorno de ejecución tiene dos capas de inicialización: XGameRuntime.lib, con la que se vincula un componente, y XGameRuntime.dll, que es la implementación real del entorno de ejecución. Cuando se inicializa XGameRuntime.lib, esta carga XGameRuntime.dll y la inicializa. La inicialización del archivo DLL usa un recuento de referencias, lo que permite que se conecten varias bibliotecas. La inicialización de la biblioteca no usa recuento de referencias: las llamadas de inicialización múltiples se omiten (aunque si se llama a XGameRuntimeInitializeWithOptions, las opciones proporcionadas se comparan con las opciones inicializadas actualmente y se devuelve E\_GAMERUNTIME\_OPTIONS\_MISMATCH si difieren).

Cada API de inicialización tiene el siguiente comportamiento:

* **XGameRuntimeInitialize**: si el archivo DLL del entorno de ejecución ya se inicializó mediante otra llamada, esta API "adopta" las opciones de inicialización que se proporcionaron en la otra llamada. Si es la primera vez que se inicializa el entorno de ejecución, se usarán los valores predeterminados para las opciones de inicialización. Los juegos siempre deben inicializar el entorno de ejecución mediante esta API.
* **XGameRuntimeInitializeWithOptions**: todos los componentes que inicialicen el entorno de ejecución deben pasar las mismas opciones si usan este método. Si el entorno de ejecución se inicializó previamente con otro conjunto de opciones, esta llamada fallará con E\_GAMERUNTIME\_OPTIONS\_MISMATCH. Los componentes de middleware, como un editor de juegos de Unity, pueden usar esta API para inicializar el entorno de ejecución con un GameConfig personalizado antes de iniciar el juego.
  El entorno de ejecución se puede volver a inicializar con opciones diferentes si primero se anula por completo su inicialización. Esto requiere que todos los módulos que llamaron a uno de los métodos XGameRuntimeInitialize\* llamen a XGameRuntimeUninitialize.

Si el juego está empaquetado en un XVC o MSIXVC, las opciones personalizadas proporcionadas deben coincidir con la configuración del archivo de configuración de juego del paquete. Si no coinciden, la llamada de inicialización fallará con E\_GAMERUNTIME\_OPTIONS\_NOT\_SUPPORTED.

Tenga en cuenta que un error ERROR\_NOT\_FOUND de la configuración de juego no cuenta como un fallo, ya que actualmente existen escenarios en los que el entorno de ejecución se inicializa fuera de los juegos. Los errores de E/S de archivos, como FILE\_NOT\_FOUND, no se transforman en E\_GAMERUNTIME\_GAMECONFIG\_BAD\_FORMAT para facilitar el diagnóstico.

**Anulación de la inicialización**\
Aquí también hay dos capas. Anular la inicialización de XgameRuntime.lib anula la inicialización de la biblioteca y libera su referencia al archivo DLL. Las llamadas posteriores para anular la inicialización de la biblioteca se omiten hasta que la biblioteca se vuelve a inicializar.

Anular la inicialización del archivo DLL disminuye el recuento de referencias. Cuando llega a cero, se anula la inicialización del archivo DLL. Este comportamiento se mantiene igual.

La anulación de la inicialización del archivo DLL puede fallar si todavía hay objetos del entorno de ejecución activos cuando el recuento de referencias del archivo DLL llega a cero. Si esto sucede, el entorno de ejecución:

* No descargará el archivo DLL del entorno de ejecución, ya que esto puede provocar un bloqueo.
* Almacenará el error para devolverlo más adelante en una futura llamada a XGameRuntimeInitialize\*.
* Se emitirá un XErrorReport.

Tenga en cuenta que, debido a este comportamiento, un error de anulación de la inicialización es terminal: el entorno de ejecución ya no está inicializado y los intentos de inicializarlo siempre fallarán.

Cuando se anula la inicialización del entorno de ejecución del juego, el juego debe cerrar todos los identificadores. Cualquier identificador que quede abierto se considera una pérdida de memoria. Intentar usar cualquier identificador filtrado de una inicialización anterior del entorno de ejecución devolverá E\_GAMERUNTIME\_INVALID\_HANDLE.

## Requisitos

**Encabezado:** XGameRuntimeInit.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

[XGameRuntimeUninitialize](/reference/system/xgameruntimeinit/functions/xgameruntimeuninitialize)\
[XGameRuntimeInitialize](/reference/system/xgameruntimeinit/functions/xgameruntimeinitialize)\
[XGameRuntimeInit](/reference/system/xgameruntimeinit/xgameruntimeinit_members)\
[Desarrollo de nuevos títulos con Gaming Runtime](/build/gdk-and-engines/guides/gdk-project-templates)


## Related topics

- [XGameRuntimeInitialize](/es/reference/system/xgameruntimeinit/functions/xgameruntimeinitialize.md)
- [XGameRuntimeOptions](/es/reference/system/xgameruntimeinit/Structures/xgameruntimeoptions.md)
- [XGameRuntimeGameConfigSource](/es/reference/system/xgameruntimeinit/Enumerations/xgameruntimegameconfigsource.md)
- [XGameRuntimeInit](/es/reference/system/xgameruntimeinit/xgameruntimeinit_members.md)
- [XGameRuntimeUninitialize](/es/reference/system/xgameruntimeinit/functions/xgameruntimeuninitialize.md)
