跳转到主要内容
本节介绍在使用不同编程语言编写的应用程序中使用 ABBYY FineReader Engine 的主要编程要点,并提供相关文章的参考链接。 适用于 Windows 的 FRE 应用程序编程接口符合 COM 标准,可用于 C/C++、.NET、Java 以及任何支持 COM 组件的开发工具。该 Engine 还可适配用于 VBS、JS、Perl 等脚本语言。 适用于 Linux 的 FRE 可用于 C/C++ 和 Java。

加载、初始化和取消初始化

不要在其他动态库的入口点,以及在动态库中实现的静态和全局对象的构造函数和析构函数中初始化和取消初始化 ABBYY FineReader Engine,因为这些函数也会在动态库入口点被调用。
用户应在其他地方初始化和取消初始化 ABBYY FineReader Engine。例如,在可执行模块的 mainWinMain 函数中。
: 在 Windows 中,此限制是因为 Win32 的 LoadLibraryFreeLibrary 函数不可重入。
在初始化期间,ABBYY FineReader Engine 会将 LC_CTYPE 设置重置为操作系统默认值。如果您的应用程序依赖于与区域设置相关的服务,则应将这一点考虑在内。
在 Windows 中,FRE 会重置 msvcrt.dll 的 LC_CTYPE 设置。
如果在取消初始化 Engine 对象之前,应用程序创建和使用的对象尚未全部删除,则在取消初始化 Engine 对象期间可能会引发“Engine deinitialization failed”异常。如果您使用的是没有垃圾回收机制的编程语言 (例如 C++) ,你必须要么使用智能指针类 (对于 Windows,请参见 C++ (COM) 的示例) ,要么在通过创建方法创建的对象不再需要时将其释放。如果所有对象都已删除,则该异常也可能是由垃圾回收器运行引起的。如果应用程序是在 Windows 上使用 Visual Basic .NET 开发的,则所有值为 Nothing 的对象都只会被标记为待删除,而不会被实际删除。 垃圾回收器究竟何时删除对象是无法确定的。因此,Linux 和 macOS 用户应在取消初始化 Engine 对象之前显式调用垃圾回收器。Windows 用户应在取消初始化 Engine 对象之前调用以下方法,以便垃圾回收器删除该对象:
GC.Collect()
GC.WaitForPendingFinalizers()
如果您正在使用日志 (可通过 Engine 对象的 StartLogging 方法启用) ,在这种情况下还可能会出现以下消息:“Warning: DeinitializeEngine() has detected external references to FREngine objects. It can indicate a leak if programming platform without automatic garbage collection is used.”。即使您显式调用了垃圾回收器 (在 Windows 版 FRE 中,即 GC.Collect) ,也不一定意味着这些对象会立即被删除。在带有垃圾回收机制的环境中工作时,您可以忽略此消息。 在没有垃圾回收机制的环境中工作时 (例如 C++) ,此异常和此消息可能表明您的源代码中存在问题。某些对象可能未得到正确处理,从而导致内存泄漏。不过,在 Engine 完成取消初始化后,所有 FineReader Engine 对象无论如何都会被删除,因此内存泄漏可能发生在代码的客户端部分,也就是说,如果您为 FineReader Engine 对象创建了自己的包装器,却没有在取消初始化之前释放它们,就可能出现这种情况。 建议使用 Engine 对象的 TotalObjectsCount 属性,它会返回尚未释放的对象数量,并可帮助您定位内存泄漏。

本节其他内容

详细介绍如何加载和卸载 ABBYY FineReader Engine。 介绍在服务器应用程序中使用时的注意事项。 有关错误处理的信息。 介绍如何处理导出为 PDF/XPS 格式时可能发生的错误。 ABBYY FineReader Engine 对象的接口包含各种属性和方法。本文讨论了在不同语言中如何处理这些属性。 ABBYY FineReader Engine 中有三种主要类型的集合。本节介绍如何使用这些集合。 ABBYY FineReader Engine 中的某些对象属于所谓的“可连接对象”。您可在此找到有关使用此类对象的实用建议。 详细介绍如何在脚本语言中使用 FineReader Engine。 介绍如何在 Java 中使用 FineReader Engine。 介绍适用于所有平台的 Java 编程特点。 介绍如何在 .NET Core 中使用 FineReader Engine。 介绍如何在 C (Objective-C) 中加载和卸载 FineReader Engine。 详细介绍如何使用以进程外服务器形式加载的 ABBYY FineReader Engine。