Saltar al contenido principal

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.

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.

También en esta sección