_bstr_t

_bstr_t類封裝BSTR有趣的地方就是它的封裝方式有點類似於智慧型指針,又有點像COM管理生存期的方式。_bstr_t將兩者結合起來並具體體現在構造函式賦值函式析構函式中。

基本介紹

簡介,構造函式,賦值函式,析構函式,

簡介

_variant_t和_bstr_t這兩個類分別封裝並管理VARIANT和BSTR這兩種數據類型,
VARIANT和BSTR這兩種類型是COM中使用的數據類型。
為了C++中的變數套用到ADO編程中,只能進行數據類型的轉換。
通過_variant_t和_bstr_t這兩個類,就可以方便的把C++類型變數轉換成COM中的變數了
ADO是基於COM接口x實現的。因此它的使用對於正在進行的 COM編程的程式設計師而言更簡單
COM是使用其特定的數據類型,_bstr_t是其中一種源類型
其他類型轉換成_bstr_t可以直接賦值。
例子_bstr_t bstr(“程式設計師”);
const char *buf=bstrVar; //不要修改buf中內容AfxMessageBox(buf);
//////////////////////////////////////////////////////////////////////////////
//
// Wrapper class for BSTR
//
//////////////////////////////////////////////////////////////////////////////
說明這個類的用途是封裝COM中最常用的BSTR類型。BSTR是COM中用來表示UNICODE編碼的字元串。下面的宏定義說明了BSTR的真正類型。
typedef unsigned short wchar_t
typedef wchar_t WCHAR;
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
不過BSTR類型並非是簡單的一個指針,一個BSTR字元串的前面有4個位元組的長度位,而且BSTR字元串的分配和釋放也需要專門的API來執行。那么_bstr_t類是怎么封裝(warp)了BSTR類型的呢?
_bstr_t類封裝BSTR有趣的地方就是它的封裝方式有點類似於智慧型指針,又有點像COM管理生存期的方式。
說它像智慧型指針,是因為智慧型指針通常都在內部維護了一個指針來指向指向任意的一種類型,當智慧型指針自己釋放時,它的析構函式會釋放掉內部指針所指的空間。在_bstr_t內部,定義了一個私有類Data_t,和一個私有的成員變數Data_t* m_Data,這就有些像智慧型指針的做法了。然而智慧型指針通常都是用模板來實現類型通用,_bstr_t通過定義私有類的方式實現了管理BSTR的專用性。
說它像COM的coclass,是因為Data_t類的兩個成員函式AddRef()和Release(),而且這兩個成員函式的實現使用的是和COM一樣的方式:InterlockedIncrement和InterlockedDecrement。怎么樣,是不是一看到它們就想起了COM?

相關詞條

熱門詞條

聯絡我們