Gli esempi in C# si applicano a Windows. Gli esempi in C++ si applicano a tutti i sistemi operativi supportati.
Tipi di proprietà in Linux e macOS
Tipi di proprietà in Linux e macOS
Per C++, una proprietà è una coppia di metodi (get e put per le proprietà in lettura-scrittura) oppure un singolo metodo get (per le proprietà di sola lettura).Le proprietà di ABBYY FineReader Engine possono essere dei seguenti tipi:
- VARIANT_BOOL (con due valori: VARIANT_TRUE o VARIANT_FALSE)
- int
- double
- BSTR, un puntatore a una stringa Unicode. Il valore zero indica una stringa vuota.
- __int64
- HANDLE*
- interfaccia derivata da IUnknown
- enum
Tipi di proprietà in Windows
Tipi di proprietà in Windows
Gli utenti di C# e Visual Basic hanno familiarità con il concetto di proprietà.Per un utente C++, una proprietà è una coppia di metodi (get e put per le proprietà in lettura-scrittura) oppure un singolo metodo get (per le proprietà di sola lettura).Tuttavia, la funzionalità “Native COM support” di Microsoft C++ fa sì che la gestione delle proprietà sia più simile a quella usata in C#.Le proprietà di ABBYY FineReader Engine possono essere dei seguenti tipi:
| IDL | C++ | C# | Visual Basic .NET |
|---|---|---|---|
| VARIANT_BOOL (VARIANT_TRUE o VARIANT_FALSE) | VARIANT_BOOL (VARIANT_TRUE o VARIANT_FALSE) | bool (true o false) | Boolean (True o False) |
| int | int | int | Integer |
| double | double | double | Double |
| BSTR, un puntatore a una stringa Unicode. Il valore zero indica una stringa vuota. | BSTR | string | String |
| __int64 | __int64 | Int64 | Int64 |
| HANDLE* | void* | IntPtr | IntPtr |
| interfaccia derivata da IUnknown | interfaccia derivata da IUnknown | object | Object |
| enum | enum | enum | Enum |
Uso delle proprietà semplici
Uso delle proprietà semplici
Useremo una proprietà Boolean come esempio di utilizzo delle proprietà semplici. La proprietà è descritta nella libreria dei tipi come segue:Se la libreria dei tipi definisce solo il metodo “get” per una proprietà semplice, questa proprietà è detta di sola lettura. Il suo valore non può essere modificato dall’utente e può essere solo letto.Un utente C# gestisce una proprietà semplice come segue:Un utente C++, invece, usa due metodi per lavorare con questa proprietà. Questi metodi hanno i prefissi get_ e put_. Il codice C++ corrispondente dovrebbe avere il seguente aspetto:Tuttavia, il supporto COM nativo in Windows semplifica la procedura e il codice corrispondente dovrebbe avere il seguente aspetto:
Utilizzo delle proprietà string
Utilizzo delle proprietà string
Lavorare con le proprietà string è molto simile a lavorare con le proprietà semplici, ma presenta alcune particolarità. Un utente C++ che lavora con le proprietà string deve liberare le stringhe passate ai metodi set e quelle restituite dai metodi get.Un utente C++ lavora con questa proprietà nel modo seguente:Windows:Linux:
- In Windows, questa operazione viene eseguita automaticamente in C#, Visual Basic e in C++ con il supporto COM nativo.
- In Linux, utilizzare le funzioni FREngineAllocString e FREngineFreeString per allocare e liberare la memoria per le stringhe.
Utilizzo delle proprietà oggetto
Utilizzo delle proprietà oggetto
Un utente C++ noterà che i parametri dei metodi “get” delle proprietà oggetto sono puntatori a un interface pointer dell’oggetto. Poiché le interfacce degli oggetti derivano da IUnknown, possono essere passate come puntatori IUnknown alle proprietà o ai metodi che accettano oggetti di più tipi come parametri di input o output (è tuttavia possibile ottenere l’interfaccia desiderata chiamando il metodo QueryInterface).Un metodo “put” per una proprietà oggetto, se presente, supporta il put diretto, descritto dalla parola chiave propput nella libreria dei tipi. Ciò significa che l’oggetto viene copiato (anziché passare un puntatore all’interfaccia di un oggetto esistente).Si supponga nuovamente che l’oggetto MyObject supporti la proprietà MyObjectProperty, che fa riferimento a un oggetto di tipo MyChildObject.Un utente C++ scriverà questo codice come segue:Si noti che in C++ è necessario chiamare il metodo Release per un oggetto ottenuto tramite una proprietà. Il supporto COM nativo in Windows chiama automaticamente i metodi AddRef e Release tramite puntatori automatici.
