ADO之_variant_t 和 _bstr_t

來源:互聯網
上載者:User
_variant_t 和 _bstr_t2008-06-03 15:28

BSTR(Basic STRing,Basic字串)是一個OLECHAR*類型的Unicode字串。它被描述成一個與自動化相相容的類型。由於作業系統提供相應的API函數(如SysAllocString)來管理它以及一些預設的調度代碼,因此BSTR實際上就是一個COM字串,但它卻在自動化技術以外的多種場合下得到廣泛使用。圖1描述了BSTR的結構,其中DWORD值是字串中實際所佔用的位元組數,且它的值是字串中Unicode字元的兩倍。

在OLE、ActiveX和COM中,VARIANT資料類型提供了一種非常有效機制,由於它既包含了資料本身,也包含了資料的類型,因而它可以實現各種不同的自動化資料的傳輸。下面讓我們來看看OAIDL.H檔案中VARIANT定義的一個簡化版:

struct tagVARIANT {
VARTYPE vt;
union {
short iVal;      // VT_I2.
long lVal;       // VT_I4.
float fltVal;     // VT_R4.
double dblVal;     // VT_R8.
DATE date;         // VT_DATE.
BSTR bstrVal;     // VT_BSTR.

short * piVal;       // VT_BYREF|VT_I2.
long * plVal;        // VT_BYREF|VT_I4.
float * pfltVal;      // VT_BYREF|VT_R4.
double * pdblVal;     // VT_BYREF|VT_R8.
DATE * pdate;         // VT_BYREF|VT_DATE.
BSTR * pbstrVal;     // VT_BYREF|VT_BSTR.
};
};

  顯然,VARIANT類型是一個C結構,它包含了一個類型成員vt、一些保留位元組以及一個大的union類型。例如,如果vt為VT_I2,那麼我們可以從iVal中讀出VARIANT的值。同樣,當給一個VARIANT變數賦值時,也要先指明其類型。例如:

VARIANT va;
:: VariantInit(&va); // 初始化
int a = 2002;
va.vt = VT_I4; // 指明long資料類型
va.lVal = a; // 賦值

_variant_t 是一個用於COM的VARIANT類,它的功能與COleVariant相似。不過在Visual C++.NET的MFC應用程式中使用時需要在代碼檔案前面添加下列兩句:

  #i nclude "comutil.h"

  #pragma comment( lib, "comsupp.lib" )

_bstr_t是是C++對BSTR的封裝,它的構造和解構函式分別調用SysAllocString和SysFreeString函數,其他動作是借用BSTR API函數。與_variant_t相似,使用時也要添加comutil.h和comsupp.lib。

CString轉換成BSTR

通常是通過使用CStringT::AllocSysString來實現。例如:

CString str("This is a test");
BSTR bstrText = str.AllocSysString();

SysFreeString(bstrText); // 用完釋放  

BSTR轉換成CString

一般可按下列方法進行:

BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;  

關於資料類型轉換由於COM對象是跨平台的,它使用了一種通用的方法來處理各種類型的資料,因此Cstring 類和COM對象是不相容的,我們需要一組API來轉換COM對象和C++類型的資料。_vatiant_t和_bstr_t就是這樣兩種對象。它們提供了通用的方法轉換COM對象和C++類型的資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.