编程方面
ABBYY FineReader Engine 应用程序编程接口符合 COM 标准,可轻松用于 C/C++、.NET、Delphi、Java 或任何其它支持 COM 组件的开发工具。Engine 可适用于 VBS、JS、Perl 等脚本语言。
本节将介绍在用不同编程语言编写的应用程序中使用ABBYY FineReader Engine 的主要方面,并提供了相关主题的文献参考。
加载、初始化和取消初始化
禁止在其它 DLL 的入口点和在 DLL 中实现的静态和全局对象的构造函数和析构函数中初始化和取消初始化 ABBYY FineReader Engine,因为它们已在 DLL 入口点被调用。该限制是由于 Win32 LoadLibrary 和 FreeLibrary 函数并非重入式。用户应在别处初始化或者取消初始化 ABBYY FineReader Engine,例如,EXE 模块的 WinMain 函数。
初始化期间,ABBYY FineReader Engine 将重置 msvcrt.dll 的 LC_CTYPE 设置为操作系统默认值。如果您的应用程序依靠msvcrt.dll区域设置相关的服务,应该考虑到该情况。
如果在 Engine 对象取消初始化之前没有删除应用程序创建和使用的所有对象,则在 Engine 对象的取消初始化期间会引发“Engine 取消初始化失败”异常。如果您使用没有垃圾回收的编程语言(例如 C++),则必须要么使用智能指针类别(点击此连接查看C++ (COM) 示例),或者在不再需要它们时释放由创建方法创建的对象。如果所有对象都已删除,则异常可能是由垃圾回收器操作引起。如果应用程序是用 Visual Basic .NET 开发的,所有带有 Nothing 值的所有对象不会被删除,而是会标记进行删除。具体什么时候垃圾回收器删除对象是未知的。因此,您应该在取消初始化 取消初始化 Engine 对象前调用以下方法,以便垃圾回收器删除对象:
GC.Collect() GC.WaitForPendingFinalizers()
如果您正在使用日志(可以通过 Engine 对象的 StartLogging 方法打开),那么消息"Warning: DeinitializeEngine() 就已经检测到了 FREngine 对象的外部引用。如果使用没有自动垃圾回收的编程平台,则可能表示存在泄露。" 也可能在这种情况下出现。即使您显式调用垃圾回收器 (GC.Collect),也并不意味着对象总是会被立即删除。如果在有垃圾回收器的环境中工作,您可以忽视该消息。
如果在没有垃圾回收器的环境中工作(比如 C++),这些异常和消息可能表示您的源代码中存在问题。某些对象可能被错误处理,导致内存泄漏。不过,在 Engine 取消初始化后,所有 FineReader Engine 对象无论如何都会被删除,因此内存泄露可能发生在代码的客户端部分,比如,您为 FineReader Engine 对象创建了自己的包装却未在取消初始化前将其释放。
考虑使用 Engine 对象的 TotalObjectsCount 属性,这将返回未释放对象的数量,可以帮助您追踪内存泄露。
本节内容还包括
下载和卸载 ABBYY FineReader Engine 的详细说明
在服务器应用程序中使用ABBYY FineReader Engine 的具体细节。
有关错误处理的信息。
描述如何处理导出为 PDF/XPS 格式期间可能发生的错误。
ABBYY FineReader Engine 对象的接口有多种属性和方法。本文讨论了用不同语言处理属性的方式。
ABBYY FineReader Engine 中有三种主要集合类型。在本节中可参阅如何处理这些集合。
ABBYY FineReader Engine 中的有些对象是所谓的“可连接对象”。您可以在这里找到如何处理此类对象的有用建议。
如何在脚本语言中使用 FineReader Engine 的详细说明。
在Delphi 中的初始化和取消初始化过程说明。
如何在 Java 中使用 FineReader Engine 的说明。
如何在 .NET Core 中使用 FineReader Engine 的说明。
在 C (Objective-C) 中下载和卸载 FineReader Engine。
在不同版本的 Microsoft Visual Studio 中使用可视化组件的具体细节。
17.09.2024 15:14:41