Vai al contenuto principale
Questa sezione descrive i principali aspetti dell’uso di ABBYY FineReader Engine nelle applicazioni scritte in diversi linguaggi di programmazione e fornisce riferimenti ad articoli che trattano argomenti correlati. L’interfaccia di programmazione delle applicazioni di FRE per Windows è conforme allo standard COM e può essere utilizzata con C/C++, .NET, Java o qualsiasi altro strumento di sviluppo che supporti i componenti COM. Engine può inoltre essere adattato per l’uso con linguaggi di scripting come VBS, JS e Perl. FRE per Linux può essere utilizzato con i linguaggi di programmazione C/C++ e Java.

Caricamento, inizializzazione e deinizializzazione

Non inizializzare o deinizializzare ABBYY FineReader Engine nei punti di ingresso di altre librerie dinamiche né nei costruttori e distruttori di oggetti statici e globali implementati in librerie dinamiche, perché vengono chiamati nei punti di ingresso della libreria dinamica.
L’utente deve inizializzare e deinizializzare ABBYY FineReader Engine altrove. Ad esempio, nella funzione main o WinMain di un modulo eseguibile.
: In Windows, questa restrizione è dovuta al fatto che le funzioni Win32 LoadLibrary e FreeLibrary non sono rientranti.
Durante l’inizializzazione, ABBYY FineReader Engine reimposta l’impostazione LC_CTYPE sui valori predefiniti del sistema operativo. Questo aspetto deve essere preso in considerazione se l’applicazione dipende da servizi sensibili alle impostazioni locali.
In Windows , FRE reimposta l’impostazione LC_CTYPE di msvcrt.dll.
L’eccezione “Engine deinitialization failed” può essere generata durante la deinizializzazione dell’oggetto Engine se non tutti gli oggetti creati e utilizzati dall’applicazione sono stati eliminati prima della deinizializzazione dell’oggetto Engine. Se si utilizzano linguaggi di programmazione che non dispongono della garbage collection (ad esempio C++), è necessario usare classi smart pointer (per Windows, vedere gli esempi in C++ (COM)) oppure rilasciare gli oggetti creati dai metodi di creazione quando non sono più necessari. Se tutti gli oggetti sono stati eliminati, l’eccezione potrebbe essere causata dal funzionamento del garbage collector. Se l’applicazione è sviluppata in Windows con Visual Basic .NET, tutti gli oggetti con valore Nothing vengono solo contrassegnati per l’eliminazione, ma non eliminati. Non è noto il momento esatto in cui il garbage collector elimina l’oggetto. Pertanto, gli utenti Linux e macOS devono chiamare esplicitamente il garbage collector prima della deinizializzazione dell’oggetto Engine. Gli utenti Windows devono chiamare i seguenti metodi prima della deinizializzazione dell’oggetto Engine affinché il garbage collector elimini l’oggetto:
GC.Collect()
GC.WaitForPendingFinalizers()
Se si utilizza il log (che può essere attivato con il metodo StartLogging dell’oggetto Engine), in questa situazione può comparire anche il messaggio “Warning: DeinitializeEngine() has detected external references to FREngine objects. It can indicate a leak if programming platform without automatic garbage collection is used.”. Anche se si richiama esplicitamente il garbage collector (in FRE per Windows, si tratta di GC.Collect), questo non significa necessariamente che gli oggetti vengano eliminati immediatamente. Quando si lavora in ambienti con garbage collector, questo messaggio può essere ignorato. Quando si lavora in ambienti senza garbage collection (come C++), questa eccezione e questo messaggio possono indicare un problema nel codice sorgente. Alcuni oggetti potrebbero essere gestiti in modo non corretto, causando una perdita di memoria. Tuttavia, dopo la deinizializzazione di Engine, tutti gli oggetti di FineReader Engine verranno comunque eliminati, quindi la perdita di memoria può verificarsi nella parte client del codice, cioè se si creano wrapper personalizzati per gli oggetti di FineReader Engine e non li si rilascia prima della deinizializzazione. È consigliabile usare la proprietà TotalObjectsCount dell’oggetto Engine, che restituisce il numero di oggetti non rilasciati e può aiutare a individuare la perdita di memoria.

Anche in questa sezione

Descrizione dettagliata del caricamento e dello scaricamento di ABBYY FineReader Engine. Particolarità dell’utilizzo nelle applicazioni server. Informazioni sulla gestione degli errori. Descrive come gestire gli errori che possono verificarsi durante l’esportazione in formato PDF/XPS. Le interfacce degli oggetti di ABBYY FineReader Engine dispongono di varie proprietà e metodi. Questo articolo illustra come le proprietà vengono gestite in diversi linguaggi. In ABBYY FineReader Engine esistono tre tipi principali di raccolte. In questa sezione viene illustrato come utilizzare queste raccolte. Alcuni degli oggetti di ABBYY FineReader Engine sono i cosiddetti “oggetti connettibili”. Qui puoi trovare consigli utili su come lavorare con questi oggetti. Descrizione dettagliata di come utilizzare FineReader Engine in un linguaggio di scripting. Descrizione di come utilizzare FineReader Engine in Java. Particolarità della programmazione Java su tutte le piattaforme. Descrizione di come utilizzare FineReader Engine in .NET Core. Caricamento e scaricamento di FineReader Engine in C (Objective-C). Descrizione dettagliata di come lavorare con ABBYY FineReader Engine caricato come server out-of-process.