Esta seção descreve os principais aspectos do uso do ABBYY FineReader Engine em aplicativos escritos em diferentes linguagens de programação e fornece referências para artigos que abordam tópicos relacionados.
A interface de programação de aplicativos do FRE para Windows está em conformidade com o padrão COM e pode ser usada em C/C++, .NET, Java ou em qualquer ferramenta de desenvolvimento que ofereça suporte a componentes COM. O Engine também pode ser adaptado para uso em linguagens de script, como VBS, JS e Perl.
O FRE para Linux pode ser usado com as linguagens de programação C/C++ e Java.
Carregamento, inicialização e desinicialização
Não inicialize nem desinicialize o ABBYY FineReader Engine nos pontos de entrada de outras bibliotecas dinâmicas, nem nos construtores e destrutores de objetos estáticos e globais implementados em bibliotecas dinâmicas, pois eles são chamados nos pontos de entrada da biblioteca dinâmica.
O usuário deve inicializar e desinicializar o ABBYY FineReader Engine em outro ponto do código. Por exemplo, na função main ou WinMain de um módulo executável.
: No Windows, essa restrição se deve ao fato de que as funções Win32 LoadLibrary e FreeLibrary não são reentrantes.
Durante a inicialização, o ABBYY FineReader Engine redefinirá a configuração LC_CTYPE para os padrões do sistema operacional. Isso deve ser levado em consideração se o seu aplicativo depender de serviços sensíveis à localidade.
No Windows, o FRE redefine a configuração LC_CTYPE de msvcrt.dll.
A exceção “Engine deinitialization failed” pode ser lançada durante a desinicialização do objeto Engine se nem todos os objetos criados e usados pelo aplicativo tiverem sido excluídos antes da desinicialização do objeto Engine. Se você trabalha com linguagens de programação que não têm coleta de lixo (por exemplo, C++), deve usar classes de ponteiro inteligente (no Windows, consulte os exemplos em C++ (COM)) ou liberar os objetos criados por métodos de criação quando eles não forem mais necessários. Se todos os objetos tiverem sido excluídos, a exceção poderá ser causada pela operação do coletor de lixo. Se o aplicativo for desenvolvido no Windows com Visual Basic .NET, todos os objetos com o valor Nothing serão apenas marcados para exclusão, mas não excluídos.
Não se sabe o momento exato em que o coletor de lixo exclui o objeto. Portanto, os usuários de Linux e macOS devem chamar o coletor de lixo explicitamente antes da desinicialização do objeto Engine. Os usuários do Windows devem chamar os seguintes métodos antes da desinicialização do objeto Engine para que o coletor de lixo exclua o objeto:
GC.Collect()
GC.WaitForPendingFinalizers()
Se você estiver usando o registro (ele pode ser ativado com o método StartLogging do objeto Engine), a mensagem “Warning: DeinitializeEngine() has detected external references to FREngine objects. It can indicate a leak if programming platform without automatic garbage collection is used.” também poderá aparecer nessa situação. Mesmo que você chame explicitamente o coletor de lixo (no FRE para Windows, isso é GC.Collect), isso nem sempre significa que os objetos serão excluídos imediatamente. Ao trabalhar em ambientes com coletor de lixo, você pode ignorar essa mensagem.
Ao trabalhar em ambientes sem coleta de lixo (como C++), essa exceção e essa mensagem podem indicar um problema no seu código-fonte. Alguns objetos podem estar sendo manipulados incorretamente, causando um vazamento de memória. No entanto, após a desinicialização do Engine, todos os objetos do FineReader Engine serão excluídos de qualquer forma, portanto o vazamento de memória pode ocorrer na parte cliente do código, ou seja, se você criar seus próprios wrappers para os objetos do FineReader Engine e não os liberar antes da desinicialização.
Considere usar a propriedade TotalObjectsCount do objeto Engine, que retorna o número de objetos não liberados e pode ajudar você a identificar o vazamento de memória.
Descrição detalhada do carregamento e descarregamento do ABBYY FineReader Engine.
Particularidades do uso em aplicativos de servidor.
Informações sobre tratamento de erros.
Descreve como tratar erros que podem ocorrer durante a exportação para o formato PDF/XPS.
As interfaces dos objetos do ABBYY FineReader Engine têm várias propriedades e métodos. A forma como as propriedades são tratadas em diferentes linguagens é discutida neste artigo.
Há três tipos principais de coleções no ABBYY FineReader Engine. Veja como trabalhar com essas coleções nesta seção.
Alguns dos objetos do ABBYY FineReader Engine são chamados de “objetos conectáveis”. Aqui você encontra recomendações úteis sobre como trabalhar com esse tipo de objeto.
Descrição detalhada de como usar o FineReader Engine em uma linguagem de script.
Descrição de como usar o FineReader Engine em Java.
Particularidades da programação em Java para todas as plataformas.
Descrição de como usar o FineReader Engine no .NET Core.
Carregamento e descarregamento do FineReader Engine em C (Objective-C).
Descrição detalhada de como trabalhar com o ABBYY FineReader Engine carregado como um servidor fora do processo.