Os exemplos em C# se aplicam ao Windows. Os exemplos em C++ se aplicam a todos os sistemas operacionais compatíveis.
Tipos de propriedades no Linux e no macOS
Tipos de propriedades no Linux e no macOS
Para C++, uma propriedade é um par de métodos (get e put, no caso de propriedades de leitura e gravação) ou um único método get (no caso de propriedades somente leitura).As propriedades do ABBYY FineReader Engine podem ser dos seguintes tipos:
- VARIANT_BOOL (com dois valores: VARIANT_TRUE ou VARIANT_FALSE)
- int
- double
- BSTR, um ponteiro para string Unicode. O valor zero especifica uma string vazia.
- __int64
- HANDLE*
- interface derivada de IUnknown
- enum
Tipos de propriedades no Windows
Tipos de propriedades no Windows
Os usuários de C# e Visual Basic já estão familiarizados com o conceito de propriedade.Para um usuário de C++, uma propriedade é um par de métodos (get e put, no caso de propriedades de leitura e gravação) ou um único método get (no caso de propriedades somente leitura).No entanto, o recurso “suporte nativo a COM” do Microsoft C++ faz com que a forma de manipular propriedades seja mais parecida com a usada em C#.As propriedades do ABBYY FineReader Engine podem ser dos seguintes tipos:
| IDL | C++ | C# | Visual Basic .NET |
|---|---|---|---|
| VARIANT_BOOL (VARIANT_TRUE ou VARIANT_FALSE) | VARIANT_BOOL (VARIANT_TRUE ou VARIANT_FALSE) | bool (true ou false) | Boolean (True ou False) |
| int | int | int | Integer |
| double | double | double | Double |
| BSTR, um ponteiro para string Unicode. O valor zero especifica uma string vazia. | BSTR | string | String |
| __int64 | __int64 | Int64 | Int64 |
| HANDLE* | void* | IntPtr | IntPtr |
| interface derivada de IUnknown | interface derivada de IUnknown | object | Object |
| enum | enum | enum | Enum |
Trabalhando com propriedades simples
Trabalhando com propriedades simples
Usaremos uma propriedade booleana como exemplo de como propriedades simples são usadas. A propriedade é descrita na biblioteca de tipos da seguinte forma:Se a biblioteca de tipos definir apenas o método “get” para uma propriedade simples, essa propriedade será chamada de somente leitura. Seu valor não pode ser alterado pelo usuário; ele só pode ser acessado para “leitura”.Um usuário de C# manipula uma propriedade simples da seguinte forma:Já um usuário de C++ usa dois métodos para trabalhar com essa propriedade. Esses métodos têm os prefixos get_ e put_. O respectivo código em C++ deve ser parecido com o seguinte:No entanto, o suporte nativo a COM no Windows simplifica o procedimento, e o respectivo código deve ser parecido com o seguinte:
Trabalhando com propriedades string
Trabalhando com propriedades string
Trabalhar com propriedades string é muito semelhante a trabalhar com propriedades simples, mas tem particularidades próprias. Um usuário de C++ que trabalha com propriedades string deve liberar as strings passadas aos métodos set, bem como as retornadas pelos métodos get.Um usuário de C++ trabalha com essa propriedade da seguinte forma:Windows:Linux:
- No Windows, isso é feito automaticamente em C#, Visual Basic e em C++ com o suporte nativo a COM.
- No Linux, use as funções FREngineAllocString e FREngineFreeString para alocar e liberar a memória das strings.
Trabalhando com propriedades de objeto
Trabalhando com propriedades de objeto
Um usuário de C++ dirá que os parâmetros dos métodos “get” de propriedades de objeto são ponteiros para o ponteiro de interface de um objeto. Como as interfaces dos objetos derivam de IUnknown, elas podem ser passadas como ponteiros para IUnknown para propriedades ou métodos que usam objetos de vários tipos como parâmetros de entrada ou saída (no entanto, você pode obter a interface necessária chamando o método QueryInterface).Um método “put” para uma propriedade de objeto, se existir, oferece suporte à atribuição por cópia, descrita pela palavra-chave propput na biblioteca de tipos. Isso significa que o objeto é copiado (em vez de ser passado um ponteiro para a interface de um objeto existente).Suponha novamente que o objeto MyObject suporte a propriedade MyObjectProperty, que se refere a um objeto do tipo MyChildObject.Um usuário de C++ escreverá esse código da seguinte forma:Observe que, em C++, você deve chamar o método Release para um objeto obtido por meio de uma propriedade. O suporte nativo a COM no Windows chama automaticamente os métodos AddRef e Release usando ponteiros automáticos.
