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 motor 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.
Carga, inicialización y desinicialización
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.
ABBYY FineReader Engine debe inicializarse y desinicializarse en otro lugar. Por ejemplo, en la función main o WinMain de un módulo ejecutable.
: En Windows, esta restricción se debe a que las funciones Win32 LoadLibrary y FreeLibrary no son reentrantes.
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.
En Windows , FRE restablece la configuración de LC_CTYPE de msvcrt.dll.
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 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 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 del objeto Engine, que devuelve el número de objetos no liberados y puede ayudarle a localizar la fuga de memoria.
Descripción detallada de cómo cargar y descargar ABBYY FineReader Engine.
Particularidades del uso en aplicaciones de servidor.
Información sobre la gestión de errores.
Describe cómo gestionar los errores que pueden producirse durante la exportación al formato PDF/XPS.
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.
Hay tres tipos principales de colecciones en ABBYY FineReader Engine. Consulte en esta sección cómo trabajar con estas colecciones.
Algunos de los objetos de ABBYY FineReader Engine son los llamados “objetos conectables”. Aquí encontrará recomendaciones útiles para trabajar con este tipo de objetos.
Descripción detallada de cómo usar FineReader Engine en un lenguaje de scripting.
Descripción de cómo usar FineReader Engine en Java.
Particularidades de la programación en Java para todas las plataformas.
Descripción de cómo usar FineReader Engine en .NET Core.
Carga y descarga de FineReader Engine en C (Objective-C).
Descripción detallada de cómo trabajar con ABBYY FineReader Engine cargado como un servidor fuera de proceso.