BSTR
BSTR(Basic String)是一種 Pascal-Style 字捾(明確標示字串長度)和 C-Style 字捾(以 \ 零結尾)的混合物,一般用於著 COM 中,是 Unicode 字捾,即標示字串長度,最後閣有一个值為 \ 零位元組。
對於 BSTR,NULL 佮 " " 有仝款的語意(Visual Basic 引入的語意)。 BSTR 的長度無包含結尾的 \ 零位元組。BSTR 著愛用 SysAlloc \ * 作業系統 API 申請佮釋放。
引論
C-Style 字捾
C 程式語言本身原並無支援字串資料結構。這字串通常用一字元數組(抑是講陣列)抑是一个指向字元資料的指標來表達。因為 C 語言的數組無包括其長度的資訊,故亦無法度表示所載之字串之長度。C 語言社群對這通用之解決方案為於字串末端增添一數值零的字元。C 語言的標準程式庫中的字串處理功能亦以這為基礎。C-Style 字串特點為無直接包含長度資訊。愛取得字串之長度,著愛對頭到尾算字元數目,一直到拄著字元零為止。因為無設長度的資訊,故 C-style 字串的長度理論上會當無上限。
Pascal-style 字捾
Pascal 程式語言採取另外一種方向處理字串。佇儲存字串的記持空間的開首,儲存一固定長度整數以表達其長度。如此 Pascal-style 字串無需要佇咧上尾加添額外字元以標明其結束。毋過因為字葩開首儲存字串長度的空間有限,故 Pascal-style 伊的字串長度有上限。但是得著字串長度方面有速度優勢。
BSTR 字捾
BSTR 字葩結合矣 C-style 字串和 Pascal-style 字捾。伊佇咧前四位元組儲存了字串長度(字串的位元組數,但是無包括 Null 結束符), 佇字串結尾用字元零識別。和 pascal-style 字串無仝,指向 BSTR 字串的指標指向第一个字元,煞非開首的字串長度。故此適用佇讀取 C-style 字串的程式庫平平適用佇咧 BSTR 字捾(毋過寫入去別款)。 字元是按照 Unicode 編碼儲存。允准佇 BSTR 串中央98入去 NULL 字元。
Windows 提供矣 BSTR 相關函式:
- 分配空間並初初化 BSTR,這嘛相當的 char \ * 轉換做 BSTR:比如講,BSTR bstrText= : : SysAllocString ( L " Test " ) ;
- BSTR SysAllocString ( const OLECHAR \ * psz ) ;
- INT SysReAllocString ( BSTR \ * pbstr , const OLECHAR \ * psz ) ;
- BSTR SysAllocStringLen ( const OLECHAR \ * strIn , UINT ui ) ;
- INT SysReAllocStringLen ( BSTR \ * pbstr , const OLECHAR \ * psz , unsigned int len ) ;
- void SysFreeString ( BSTR bstrString ) ;
- UINT SysStringLen ( BSTR ) ; / / 長度是講字串中字元的數,毋是位元組數
- UINT SysStringByteLen ( BSTR bstr ) ; 長度是講字串中位元組數
- BSTR SysAllocStringByteLen ( LPCSTR psz , UINT len ) ;
- 使用 \ _ variant \ _ t 共 char \ * 轉換做 BSTR:比如講,\ _ variant \ _ t strVar ( " This is a test " ) ; BSTR bstrText=strVar . bstrVal ;
- 使用 \ _ bstr \ _ t 函式,比如講:BSTR bstrText=\ _ bstr \ _ t ( " This is a test " ) ;
- 使用 ATL 中專門咧操作 BSTR 字元的 CComBSTR 類:比如講 BSTR bstrText=CComBSTR ( " This is a test " ) ;
- 使用 ConvertStringToBSTR。比如講:char \ * lpszText=" Test " ; BSTR bstrText=\ _ com \ _ util : : ConvertStringToBSTR ( lpszText ) ;
- 使用 ConvertBSTRToString:比如講,char \ * lpszText 二=\ _ com \ _ util : : ConvertBSTRToString ( bstrText ) ;
- 使用 \ _ bstr \ _ t 的類型轉換運算子加載共 BSTR 轉換做 char \ *:比如講,char \ * lpszText 二=bstrText ;
- CString 轉換做 BSTR 通常是通過使用 CStringT : : AllocSysString 來實現。比如講:CString str ( " This is a test " ) ; BSTR bstrText=str . AllocSysString ( ) ;
- BSTR 轉換做 CString,比如講:CStringA str=bstrText ;
參考文獻
- [/ / web . archive . org / web / 二十五空七百空七堵一千一百十五謼一千三百三十六 / http : / / msdn 二 . microsoft . com / en-us / library / ms 二十二孵一千空六十九 . aspx 頁面存檔備份,存在網路檔案館)MSDN]
- C String
- What are VB String