日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

問(wèn)津BSTR

系統(tǒng) 1799 0

COM 中除了使用一些簡(jiǎn)單標(biāo)準(zhǔn)的數(shù)據(jù)類型外(注2),字符串類型需要特別重點(diǎn)地說(shuō)明一下。還記得原則嗎? COM 組件是運(yùn)行在分布式環(huán)境中的 。通俗地說(shuō),你不能直接把一個(gè)內(nèi)存指針直接作為參數(shù)傳遞給COM函數(shù)。你想想,系統(tǒng)需要把這塊內(nèi)存的內(nèi)容傳遞到“地球另一 邊”的計(jì)算機(jī)上,因此,我至少需要知道你這塊內(nèi)存的尺寸吧?不然讓我如何傳遞呀?傳遞多少字節(jié)呀?!而字符串又是非常常用的一種類型,因此 COM 設(shè)計(jì)者引入了 BASIC 中字符串類型的表示方式---BSTR。BSTR 其實(shí)是一個(gè)指針類型,它的內(nèi)存結(jié)構(gòu)是:(輸入程序片段 BSTR p = ::SysAllocString(L"Hello,你好");斷點(diǎn)執(zhí)行,然后觀察p的內(nèi)存)


圖二、BSTR 內(nèi)存結(jié)構(gòu)

  BSTR 是一個(gè)指向 UNICODE 字符串的指針,且 BSTR 向前的4個(gè)字節(jié)中,使用DWORD保存著這個(gè)字符串的字節(jié)長(zhǎng)度( 沒(méi)有含字符串的結(jié)束符)。因此系統(tǒng)就能夠正確處理并傳送這個(gè)字符串到“地球另一 邊”了。特別需要注意的是,由于BSTR的指針就是指向 UNICODE 串,因此 BSTR 和 LPOLESTR 可以在一定程度上混用,但一定要注意:
  有函數(shù) fun(LPCOLESTR lp),則你調(diào)用 BSTR p=...; fun(p); 正確
  有函數(shù) fun(const BSTR bstr),則你調(diào)用 LPCOLESTR p=...; fun(p); 錯(cuò)誤!!!
有關(guān) BSTR 的處理函數(shù):

API 函數(shù) 說(shuō)明
SysAllocString() 申請(qǐng)一個(gè) BSTR 指針,并初始化為一個(gè)字符串
SysFreeString() 釋放 BSTR 內(nèi)存
SysAllocStringLen() 申請(qǐng)一個(gè)指定字符長(zhǎng)度的 BSTR 指針,并初始化為一個(gè)字符串
SysAllocStringByteLen() 申請(qǐng)一個(gè)指定字節(jié)長(zhǎng)度的 BSTR 指針,并初始化為一個(gè)字符串
SysReAllocStringLen() 重新申請(qǐng) BSTR 指針

CString 函數(shù)

說(shuō)明

AllocSysString() 從 CString 得到 BSTR
SetSysString() 重新申請(qǐng) BSTR 指針,并復(fù)制到 CString 中

CComBSTR 函數(shù)

ATL 的 BSTR 包裝類。在 atlbase.h 中定義

Append()、AppendBSTR()、AppendBytes()、ArrayToBSTR()、BSTRToArray()、AssignBSTR()、Attach()、Detach()、Copy()、CopyTo()、Empty()、Length()、ByteLength()、ReadFromStream()、WriteToStream()、LoadString()、ToLower()、ToUpper()
運(yùn)算符重載:!,!=,==,<,>,&,+=,+,=,BSTR
太多了,但從函數(shù)名稱不能看出其基本功能。詳細(xì)資料,查看MSDN 吧。另外,左側(cè)函數(shù),有很多是 ATL 7.0 提供的,VC6.0 下所帶的 ATL 3.0 不支持。
由于我們將來(lái)主要用 ATL 開(kāi)發(fā)組件程序,因此使用 ATL 的 CComBSTR 為主。VC也提供了其它的包裝類 _bstr_t。

問(wèn)津BSTR


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 余干县| 来安县| 乌恰县| 法库县| 嵩明县| 双峰县| 沙田区| 普宁市| 汝州市| 潮州市| 泰来县| 青河县| 河源市| 浠水县| 平山县| 新乐市| 咸宁市| 潜江市| 前郭尔| 板桥市| 安顺市| 长乐市| 乌兰察布市| 南川市| 乌鲁木齐市| 东乡族自治县| 潮州市| 拉萨市| 图木舒克市| 永定县| 安远县| 喜德县| 安顺市| 嵩明县| 眉山市| 临邑县| 德兴市| 崇仁县| 历史| 墨脱县| 清丰县|