C# 示例适用于 Windows。C++ 示例适用于所有受支持的操作系统。
Linux 和 macOS 属性类型
Linux 和 macOS 属性类型
在 C++ 中,属性由一对方法组成 (读写属性使用 get 和 put 方法) ,或仅包含单个 get 方法 (只读属性) 。ABBYY FineReader Engine 属性支持以下类型:
- VARIANT_BOOL (取值为 VARIANT_TRUE 或 VARIANT_FALSE)
- int
- double
- BSTR,指向 Unicode 字符串的指针。零值表示空字符串。
- __int64
- HANDLE*
- IUnknown 派生接口
- enum
Windows 属性类型
Windows 属性类型
C# 和 Visual Basic 用户对属性的概念较为熟悉。对于 C++ 用户,属性由一对方法组成 (读写属性使用 get 和 put 方法) ,或仅包含单个 get 方法 (只读属性) 。不过,Microsoft C++ 提供的”原生 COM 支持”使属性的处理方式更接近 C# 中的用法。ABBYY FineReader Engine 属性支持以下类型:
| IDL | C++ | C# | Visual Basic .NET |
|---|---|---|---|
| VARIANT_BOOL (VARIANT_TRUE or VARIANT_FALSE) | VARIANT_BOOL (VARIANT_TRUE or VARIANT_FALSE) | bool (true or false) | Boolean (True or False) |
| int | int | int | Integer |
| double | double | double | Double |
| BSTR,指向 Unicode 字符串的指针。零值表示空字符串。 | BSTR | string | String |
| __int64 | __int64 | Int64 | Int64 |
| HANDLE* | void* | IntPtr | IntPtr |
| IUnknown 派生接口 | IUnknown 派生接口 | object | Object |
| enum | enum | enum | Enum |
使用简单属性
使用简单属性
下面以布尔属性为例,介绍简单属性的使用方式。该属性在类型库中的定义如下:如果类型库仅为某个简单属性定义了”get”方法,则该属性为只读属性。其值不能由用户修改,只能进行”读取”访问。C# 用户对简单属性的处理方式如下:而 C++ 用户则需要通过两个方法来操作该属性,这两个方法分别带有 get_ 和 put_ 前缀。相应的 C++ 代码如下所示:不过,Windows 中的原生 COM 支持简化了这一过程,相应代码如下所示:
使用字符串属性
使用字符串属性
使用字符串属性与使用简单属性非常相似,但有其自身的特殊之处。在 C++ 中使用字符串属性时,用户必须释放传递给 set 方法的字符串,以及 get 方法返回的字符串。C++ 用户对该属性的使用方式如下:Windows:Linux:
- 在 Windows 中,C#、Visual Basic 以及使用 Native COM 支持的 C++ 会自动处理此操作。
- 在 Linux 中,请使用 FREngineAllocString 和 FREngineFreeString 函数来分配和释放字符串内存。
使用对象属性
使用对象属性
C++ 用户需要注意,对象属性的 “get” 方法的参数是指向对象接口指针的指针。由于对象的接口派生自 IUnknown,因此可以将其作为 IUnknown 指针传递给以多种类型对象作为输入或输出参数的属性或方法 (不过,您也可以通过调用 QueryInterface 方法来获取所需接口) 。对象属性的 “put” 方法 (如果存在) 支持类型库中由 propput 关键字描述的 clear put 操作,即对象会被复制,而非传递指向现有对象接口的指针。再次假设 MyObject 对象支持 MyObjectProperty 属性,该属性引用 MyChildObject 类型的对象。C++ 用户将按如下方式编写此代码:请注意,在 C++ 中,应对通过属性获取的对象调用 Release 方法。Windows 中的 Native COM 支持会使用自动指针自动调用 AddRef 和 Release 方法。
