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

# Aspectos de programación

> Aspectos de programación de ABBYY FineReader Engine: API COM en Windows para C/C++, .NET, Java y lenguajes de scripting; C/C++ y Java en Linux.

Esta sección describe los principales aspectos del uso de ABBYY FineReader Engine en aplicaciones escritas en distintos lenguajes de programación y ofrece referencias a artículos sobre temas relacionados.

La API de FRE para Windows cumple con el estándar COM y puede utilizarse en C/C++, .NET, Java o en cualquier herramienta de desarrollo compatible con componentes COM. El Engine también puede adaptarse para su uso en lenguajes de scripting como VBS, JS y Perl.

FRE para Linux puede utilizarse con los lenguajes de programación C/C++ y Java.

<div id="loading-initialization-and-deinitialization">
  ## Carga, inicialización y desinicialización
</div>

<Warning>
  No inicialice ni desinicialice ABBYY FineReader Engine en los puntos de entrada de otras bibliotecas dinámicas ni en los constructores y destructores de objetos estáticos y globales implementados en bibliotecas dinámicas, porque estos se llaman en los puntos de entrada de las bibliotecas dinámicas.
</Warning>

ABBYY FineReader Engine debe inicializarse y desinicializarse en otro lugar. Por ejemplo, en la función main o WinMain de un módulo ejecutable.

<Note>
  En Windows, esta restricción se debe a que las funciones Win32 LoadLibrary y FreeLibrary no son reentrantes.
</Note>

Durante la inicialización, ABBYY FineReader Engine restablece la configuración de LC\_CTYPE a los valores predeterminados del sistema operativo. Esto debe tenerse en cuenta si su aplicación depende de servicios vinculados a la configuración regional.

<Note>
  En Windows , FRE restablece la configuración de LC\_CTYPE de msvcrt.dll.
</Note>

La excepción "Engine deinitialization failed" puede generarse durante la desinicialización del objeto Engine si no se han eliminado todos los objetos creados y utilizados por la aplicación antes de desinicializar el objeto Engine. Si trabaja con lenguajes de programación que no tienen recolección de basura (por ejemplo, C++), debe usar clases de punteros inteligentes (en Windows, consulte los [ejemplos](/es/fine-reader/engine/guided-tour/samples) en C++ (COM)) o liberar los objetos creados mediante métodos de creación cuando ya no sean necesarios. Si ya se han eliminado todos los objetos, la excepción puede deberse al funcionamiento del recolector de basura. Si la aplicación se desarrolla en Windows con Visual Basic .NET, todos los objetos con el valor Nothing solo se marcan para su eliminación, pero no se eliminan.

No se conoce el momento exacto en que el recolector de basura elimina el objeto. Por lo tanto, los usuarios de Linux y macOS deben llamar explícitamente al recolector de basura antes de la desinicialización del objeto Engine. Los usuarios de Windows deben llamar a los siguientes métodos antes de la desinicialización del objeto Engine para que el recolector de basura elimine el objeto:

```
GC.Collect()
GC.WaitForPendingFinalizers()
```

Si está usando el registro (se puede activar con el método [StartLogging](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/supplementary-methods/startlogging-method) del objeto Engine), el mensaje "Warning: DeinitializeEngine() has detected external references to FREngine objects. It can indicate a leak if programming platform without automatic garbage collection is used." también puede aparecer en esta situación. Aunque invoque explícitamente el recolector de basura (en FRE para Windows, es GC.Collect), esto no siempre significa que los objetos se eliminen de inmediato. Al trabajar en entornos con recolector de basura, puede ignorar este mensaje.

Al trabajar en entornos sin recolección de basura (como C++), esta excepción y este mensaje pueden indicar un problema en su código fuente. Es posible que algunos objetos no se estén administrando correctamente, lo que provoca una fuga de memoria. Sin embargo, después de la desinicialización de Engine, todos los objetos de FineReader Engine se eliminarán en cualquier caso, por lo que la fuga de memoria puede producirse en la parte cliente del código; es decir, si crea sus propios envoltorios para los objetos de FineReader Engine y no los libera antes de la desinicialización.

Considere usar la propiedad [TotalObjectsCount](/es/fine-reader/engine/api-reference/engine-object-iengine-interface/properties#totalobjectscount) del objeto Engine, que devuelve el número de objetos no liberados y puede ayudarle a localizar la fuga de memoria.

<div id="also-in-this-section">
  ## También en esta sección
</div>

* [Diferentes formas de cargar el objeto Engine](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/different-ways-to-load-engine) para Windows

  Descripción detallada de cómo cargar y descargar ABBYY FineReader Engine.

* [Uso de ABBYY FineReader Engine en aplicaciones de servidor multiproceso](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/using-in-server-applications) para Windows

  Particularidades del uso en aplicaciones de servidor.

* [Gestión de errores](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/error-handling)

  Información sobre la gestión de errores.

* [Gestión de errores durante la exportación a PDF/XPS](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/handling-errors-during-pdfxps-export)

  Describe cómo gestionar los errores que pueden producirse durante la exportación al formato PDF/XPS.

* [Trabajo con Propiedades](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-properties)

  Las interfaces de los objetos de ABBYY FineReader Engine tienen varias propiedades y métodos. En este artículo se explica cómo se gestionan las propiedades en distintos lenguajes.

* [Trabajo con colecciones](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-collections)

  Hay tres tipos principales de colecciones en ABBYY FineReader Engine. Consulte en esta sección cómo trabajar con estas colecciones.

* [Trabajo con objetos conectables](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/working-with-connectable-objects)

  Algunos de los objetos de ABBYY FineReader Engine son los llamados "objetos conectables". Aquí encontrará recomendaciones útiles para trabajar con este tipo de objetos.

* [Trabajo con interfaces COM desde un lenguaje de scripting](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/using-in-scripting-languages) para Windows

  Descripción detallada de cómo usar FineReader Engine en un lenguaje de scripting.

* [Uso de ABBYY FineReader Engine en Java](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/using-in-java) para Linux y Windows

  Descripción de cómo usar FineReader Engine en Java.

* [Desarrollo multiplataforma en Java](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/cross-platform-development-in-java) para Linux y Windows

  Particularidades de la programación en Java para todas las plataformas.

* [Uso de ABBYY FineReader Engine en .NET Core](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/using-in-net-core) para Windows

  Descripción de cómo usar FineReader Engine en .NET Core.

* [Uso de ABBYY FineReader Engine en C (Objective-C)](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/using-in-cobjective-c) para Windows

  Carga y descarga de FineReader Engine en C (Objective-C).

* [Implementación de servidor fuera de proceso](/es/fine-reader/engine/guided-tour/advanced-techniques/programming-aspects/out-of-process-server-implementation) para Linux

  Descripción detallada de cómo trabajar con ABBYY FineReader Engine cargado como un servidor fuera de proceso.
