メインコンテンツへスキップ
このセクションでは、さまざまなプログラミング言語で作成されたアプリケーションで 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 の初期化と終了は、それ以外の場所で行う必要があります。たとえば、実行可能モジュールの main 関数または WinMain 関数で行います。
: Windows では、この制約は Win32 の LoadLibrary 関数と FreeLibrary 関数がリエントラントではないことによるものです。
初期化中に、ABBYY FineReader Engine は LC_CTYPE の設定をオペレーティング システムの既定値にリセットします。アプリケーションがロケール依存のサービスに依存している場合は、この点を考慮する必要があります。
Windows では、FRE は msvcrt.dll の LC_CTYPE 設定をリセットします。
アプリケーションで作成および使用されたすべてのオブジェクトが Engine オブジェクトの終了前に削除されていない場合、Engine オブジェクトの終了処理中に “Engine deinitialization failed” 例外がスローされることがあります。ガベージ コレクションのないプログラミング言語 (たとえば C++) を使用している場合は、スマート ポインター クラスを使用するか (Windows の場合は、C++ (COM) の samples を参照) 、作成メソッドによって生成されたオブジェクトが不要になった時点で解放する必要があります。すべてのオブジェクトが削除されている場合、この例外はガベージ コレクターの動作が原因で発生している可能性があります。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 には、主なコレクションの種類が 3 つあります。このセクションでは、これらのコレクションの扱い方を説明します。 ABBYY FineReader Engine のオブジェクトの一部は、いわゆる「接続可能オブジェクト」です。ここでは、そのようなオブジェクトを扱う際に役立つ推奨事項を紹介します。 スクリプト言語で FineReader Engine を使用する方法を詳しく説明します。 Java で FineReader Engine を使用する方法を説明します。 すべてのプラットフォームに共通する Java プログラミングの特徴を説明します。 .NET Core で FineReader Engine を使用する方法を説明します。 C (Objective-C) での FineReader Engine のロードとアンロードについて説明します。 アウトオブプロセス サーバーとしてロードされた ABBYY FineReader Engine の操作方法を詳しく説明します。