C# 範例適用於 Windows。C++ 範例適用於所有支援的作業系統。
Linux 和 macOS 的屬性類型
Linux 和 macOS 的屬性類型
對 C++ 而言,屬性是一組方法 (可讀寫屬性包含 get 和 put) ,或單一 get 方法 (唯讀屬性) 。ABBYY FineReader Engine 的屬性可以是下列類型:
- VARIANT_BOOL (有兩個值:VARIANT_TRUE 或 VARIANT_FALSE)
- int
- double
- BSTR,指向 Unicode string 的指標。零值表示空字串。
- __int64
- HANDLE*
- 衍生自 IUnknown 的介面
- enum
Windows 的屬性類型
Windows 的屬性類型
C# 和 Visual Basic 使用者對屬性的概念都很熟悉。對 C++ 使用者而言,屬性是一組方法 (可讀寫屬性包含 get 和 put) ,或單一 get 方法 (唯讀屬性) 。不過,Microsoft C++ 提供的「Native COM 支援」功能,讓屬性的處理方式更接近 C# 的做法。ABBYY FineReader Engine 的屬性可以是下列類型:
| IDL | C++ | C# | Visual Basic .NET |
|---|---|---|---|
| VARIANT_BOOL (VARIANT_TRUE 或 VARIANT_FALSE) | VARIANT_BOOL (VARIANT_TRUE 或 VARIANT_FALSE) | bool (true 或 false) | Boolean (True 或 False) |
| int | int | int | Integer |
| double | double | double | Double |
| BSTR,指向 Unicode string 的指標。零值表示空字串。 | BSTR | string | String |
| __int64 | __int64 | Int64 | Int64 |
| HANDLE* | void* | IntPtr | IntPtr |
| 衍生自 IUnknown 的介面 | 衍生自 IUnknown 的介面 | object | Object |
| enum | enum | enum | Enum |
使用簡單屬性
使用簡單屬性
我們將以 Boolean 屬性為例,說明簡單屬性的使用方式。此屬性在型別程式庫中的描述如下:如果型別程式庫只為簡單屬性定義了「get」方法,這個屬性就稱為唯讀。使用者無法變更其值,只能讀取。C# 使用者處理簡單屬性的方式如下:另一方面,C++ 使用者會使用兩個方法來操作此屬性。這些方法帶有 get_ 和 put_ 前綴。對應的 C++ 程式碼如下:不過,Windows 中的 Native COM 支援 可讓此程序更簡單,對應的程式碼如下:
使用 string 屬性
使用 string 屬性
使用 string 屬性的方式與使用簡單屬性非常相似,但也有其特殊之處。使用 string 屬性的 C++ 使用者,必須釋放傳遞給 set 方法的字串,以及由 get 方法傳回的字串。C++ 使用者可按如下方式使用此屬性:Windows:Linux:
- 在 Windows 中,這項作業會在 C#、Visual Basic,以及具備 Native COM 支援的 C++ 中自動完成。
- 在 Linux 中,請使用 FREngineAllocString 和 FREngineFreeString 函式來配置及釋放字串記憶體。
使用物件屬性
使用物件屬性
C++ 使用者會說,物件屬性的 “get” 方法參數是指向物件介面指標的指標。由於物件的介面衍生自 IUnknown,因此可將它們作為 IUnknown 指標傳遞給那些以多種類型物件作為輸入或輸出參數的屬性或方法 (不過,您也可以透過呼叫 QueryInterface 方法來取得所需的介面) 。如果物件屬性有 “put” 方法,則其支援 clear put,這在型別程式庫中是以 propput 關鍵字描述的。這表示系統會複製該物件 (而不是傳遞現有物件介面的指標) 。再次假設 MyObject 物件支援 MyObjectProperty 屬性,而該屬性參照的是 MyChildObject type 的物件。C++ 使用者會如下撰寫此程式碼:請注意,在 C++ 中,您應對透過屬性取得的物件呼叫 Release 方法。在 Windows 中,Native COM 支援會使用 auto pointers 自動呼叫 AddRef 和 Release 方法。
