青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 126,  comments - 73,  trackbacks - 0
BSTR 設計對于 C++ 程序員好壞參半。一方面, BSTR 可以被用于大多數需要 OLECHAR 數組作為參數的函數。另一方面,不能用熟悉的 C/C++ 函數進行對 BSTR 的分配、釋放和處理,例如 malloc, free, new, delete, lstrcat, and lstrlen 等函數不能用于處理 BSTR 。就像對接口指針和類指針的處理不一樣,對 BSTR 的處理和對 TCHAR* 的處理也不一樣。 BSTR 是一種 C 語言方式的類型定義方式,這種定義方式提高了 BSTR C++ 的應用效率,但是也帶來了很多的潛在風險,它使程序員失去了利用編譯器檢查潛在問題的機會。
1.2 ????? BSTR 使用基本規則
?
  • 在對 BSTR 進行讀取操作的時候,可以把 BSTR 看作 OLECHAR 數組。 BSTR 可以用于 const wchar_t*( LPCTSTR/ LPCWSTR/ cosnt TCHAR*/ cosnt WCHAR* in Unicode project ) ,不能用于 需要 wchar_t* ( LPTSTR/ LPWSTR/ TCHAR*/ WCHAR* in Unicode project ) 的地方。
  • 如果有相應的 BSTR 處理函數,必須使用 BSTR 處理函數,不要使用普通字符串函數。特別是一個 BSTR 包含多個字符串 ( 也就是,包含多個 0 結束符 ) 的情況。 在對 BSTR 進行修改(包括創建和釋放時),必須使用 BSTR 的專用函數。主要要保證對字符長度前綴的正確修改。不要直接讀取 BSTR 的長度域,應該使用 BSTR 處理函數計算長度。
?
String Manipulation Functions ????
Descriptions
SysAllocString
Creates and initializes a string.
SysAllocStringByteLen
Creates a zero-terminated string of a specified length.
SysAllocStringLen
Creates a string of a specified length.
SysFreeString
Frees a previously created string.
SysReAllocString
Changes the size and value of a string.
SysReAllocStringLen
Changes the size of an existing string.
SysStringByteLen
Returns the length of a string in bytes.
SysStringLen
Returns the length of a string.
?
  • NULL BSTR 的有效值。按照約定,它可以被看作含有 0 個字符的字符串。 BSTR 變量必須等于 NULL ,或者正確分配的 BSTR 指針。在改變 BSTR 變量的之前,必須釋放原來指向的 BSTR 不要把 BSTR 直接初始化成常量字符指針,例如, BSTR?bs = L””
  • Automation cache BSTR 使用的空間,以提高 SysAllocString/SysFreeString 的性能,會給測試發現問題帶來困難。如果可能推薦在調試時使用 Compuware DevPartner 7.x 及更高版本的工具。
?
1.3 ????? BSTR 參數使用
多數時候, BSTR 是被用于函數參數。關于 BSTR 參數的使用規則是 BSTR 類型的基礎。只有熟練掌握,才能分析 warpper 類或轉換函數的正確性。
?
? 基本原則:在給 by-reference[in/out] 參數賦一個新的值前,被調用者負責釋放。其他情況,都是調用者負責釋放。
?
調用者使用 BSTR 的規則如下:
·???????? 釋放被調用函數返回的 BSTR ,或者被調用函數通過 by-reference 返回的 BSTR
HRESULT IWebBrowser2::get_StatusText( BSTR FAR* pbstr );
//...
BSTR bstrStatus;
pBrowser->get_StatusText( &bstrStatus );
?
// shows using the Win32 function
// to freee the memory for the string:
::SysFreeString( bstrStatus );
?
·???????? 釋放通過 by-value 方式傳給其他函數的 BSTR.
//.h
HRESULT IWebBrowser2::put_StatusText( BSTR bstr );
?
//.cpp
// shows using the Win32 function
// to allocate memory for the string:
BSTR bstrStatus = ::SysAllocString( L"Some text" );
if (bstrStatus == NULL)
?? return E_OUTOFMEMORY;
?
pBrowser->put_StatusText( bstrStatus );
// Free the string:
::SysFreeString( bstrStatus );
//...
?
被調用者按照如下規則處理 BSTR
·???????? 如果一個 BSTR 參數是 by-reference 方式,在給參數賦新值之前, Free 以前的值。如果沒有給參數賦的新值,不要 Free 傳入值。
void RefreshBSTR(BSTR& bs)
// bs is an [in/out] parameter. BSTR* is the same
{
// using the bs here
Dosomething(bs);
// if (bs is about to be updated)
ASSERT(bs != NULL);
::SysReallocString(bs, _T(“NEW STRING”));
// SysReallocString will call SysFreeString and
// SysAllocString in sequence
// If bs is only [out] parameter, SysAllocString
// should be called here.
}
?
·???????? 不要 Free 通過 by-value 傳入的 BSTR
void SetBSTR(BSTR bs)
// bs is an [in] parameter. BSTR* is the same
{
// using the bs here
Dosomething(bs);
::SysFreeString(bs); //ERROR
}
?
·???????? 不要 Free 返回給調用者的 BSTR .
BSTR GetBSTR1()
{
BSTR bs = ::SysAllocString(_T(“test”));
::SysFreeString(bs); //ERROR
return bs;
}
?
void GetBSTR2(BSTR* pBs)
{
CComBSTR bs(_T(“test”));
*pBS = (BSTR) bs; //ERROR: pBS will be freed automatically
}
?
·???????? 如果需要保存傳入的 BSTR ,被調用著需要用 SysAllocString() 生成一個新的副本,并保存。輸入的 BSTR 會被調用者釋放。
void MyClass::SetBSTR(BSTR bs)
{
//BSTR m_bs;
m_bs = bs; //ERROR
m_bs = ::SysReAllocString(bs);
}
·???????? 如果需要返回一個已經存儲的 BSTR ,返回 BSTR 的一個拷貝。調用者釋放返回的 BSTR 拷貝。
void MyClass::GetBSTR(BSTR* pbs)
{
//BSTR m_bs;
*pbs = m_bs; //ERROR
*pbs = ::SysAllocString(m_bs);
}
?


From: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1486367

posted on 2007-01-26 16:06 我風 閱讀(1373) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

C++

MyFavorite

搜索

  •  

積分與排名

  • 積分 - 329151
  • 排名 - 76

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            精品成人一区二区三区| 国产一区二区三区av电影| 亚洲国产高清一区| 免费日韩一区二区| 美日韩精品免费| 91久久精品一区| 亚洲国产一成人久久精品| 蜜臀久久久99精品久久久久久 | 亚洲综合国产精品| 国产精品播放| 欧美在线观看一二区| 亚洲欧美综合网| 伊人成综合网伊人222| 久久国产精品一区二区三区| 久久精品免费播放| 亚洲精品久久久久久一区二区| 亚洲精品免费电影| 国产精品福利影院| 久久―日本道色综合久久| 美脚丝袜一区二区三区在线观看 | 亚洲精品久久视频| 中文精品视频| 在线观看视频一区| 一本色道久久综合亚洲二区三区| 国产欧美午夜| 亚洲国产精品视频| 国产麻豆91精品| 欧美成人在线免费视频| 国产精品看片你懂得| 免费亚洲一区| 国产精品三级视频| 亚洲电影免费观看高清完整版在线 | 久久综合伊人77777| 欧美激情第9页| 久久九九免费| 欧美日韩国产专区| 免费观看一级特黄欧美大片| 欧美四级在线| 欧美激情偷拍| 国内外成人在线视频| 亚洲人成小说网站色在线| 国产在线成人| 亚洲素人在线| 9人人澡人人爽人人精品| 久久福利影视| 欧美怡红院视频一区二区三区| 欧美激情一区二区三区高清视频| 久久精品一本久久99精品| 欧美精选午夜久久久乱码6080| 久久久伊人欧美| 国产精品资源| 亚洲视频专区在线| 中文精品在线| 欧美精品在线视频观看| 免费在线观看成人av| 国产亚洲激情视频在线| 一本色道久久88综合亚洲精品ⅰ | 亚洲国产天堂久久综合网| 小嫩嫩精品导航| 亚洲欧美日韩在线一区| 欧美片在线观看| 亚洲国产天堂久久综合网| 亚洲成人资源| 久久亚洲精品伦理| 免费亚洲视频| 亚洲精品国产精品国自产观看浪潮| 久久精品一区二区三区不卡牛牛| 欧美亚洲一区二区在线| 国产精品免费网站| 亚洲一级免费视频| 欧美一区午夜精品| 国产欧美一区二区三区另类精品 | 欧美 日韩 国产精品免费观看| 国产午夜精品久久久久久久| 午夜精品久久久久久久蜜桃app | 另类av一区二区| 好吊一区二区三区| 久久久天天操| 欧美激情网站在线观看| 日韩视频在线免费观看| 欧美日韩精品一二三区| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美国产高清| 国产精品午夜在线| 久久成人免费电影| 欧美xxx在线观看| 99国产精品99久久久久久粉嫩 | 先锋影音一区二区三区| 久久一日本道色综合久久| 在线免费日韩片| 欧美精品日韩精品| 一卡二卡3卡四卡高清精品视频| 亚洲欧美综合v| 激情av一区| 欧美日韩国产综合一区二区| 亚洲欧美日韩中文在线制服| 蜜臀久久99精品久久久久久9| 亚洲精选国产| 国产精品乱码一区二三区小蝌蚪| 久久久av水蜜桃| 亚洲精品一区二区在线观看| 久久av资源网| 一区二区高清在线观看| 国产日韩欧美在线观看| 欧美黄色aaaa| 香港成人在线视频| 亚洲精品久久嫩草网站秘色| 久久国产精品久久精品国产| 亚洲伦理在线| 狠狠久久婷婷| 国产精品xxxav免费视频| 麻豆91精品| 午夜视频在线观看一区二区三区 | 看片网站欧美日韩| 中国成人黄色视屏| 亚洲第一天堂无码专区| 国产精品一区2区| 欧美成人免费在线视频| 久久av一区二区三区| 亚洲精品视频在线| 欧美成人精品h版在线观看| 久久er99精品| 亚洲在线免费| 一本色道久久综合一区| 在线精品国产成人综合| 国产日韩一区二区三区在线播放 | 欧美精品三级在线观看| 久久久久亚洲综合| 香蕉精品999视频一区二区 | 久久亚洲视频| 欧美亚洲一级片| 亚洲影院一区| 在线亚洲观看| 99re8这里有精品热视频免费 | 欧美色欧美亚洲高清在线视频| 久久久久久日产精品| 羞羞色国产精品| 亚洲一区二区免费| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产在线国偷精品产拍免费yy| 欧美视频在线免费看| 欧美日韩亚洲激情| 欧美日韩精品免费| 欧美日韩裸体免费视频| 欧美日韩国产一级片| 欧美日韩另类视频| 欧美日韩一区成人| 国产精品久久国产三级国电话系列| 欧美视频中文字幕| 国产精品va在线| 国产麻豆精品久久一二三| 国产麻豆91精品| 国产一区二区在线免费观看| 国产一级精品aaaaa看| 狠狠干综合网| 亚洲欧洲精品成人久久奇米网| 最新日韩av| 亚洲小视频在线| 欧美在线观看一区| 久久亚洲免费| 亚洲黄色成人久久久| 99视频精品| 亚洲欧美一级二级三级| 欧美一级电影久久| 老牛国产精品一区的观看方式| 免费观看成人| 欧美三区在线观看| 国产精品视屏| 亚洲电影免费观看高清完整版在线观看| 黄色精品一区二区| 亚洲精品欧美一区二区三区| 制服诱惑一区二区| 久久精品天堂| 亚洲精品免费观看| 亚洲欧美欧美一区二区三区| 久久久久9999亚洲精品| 欧美精品久久99久久在免费线| 国产精品美女久久久浪潮软件| 激情六月婷婷综合| 一区二区欧美在线观看| 久久精品一区二区三区不卡牛牛| 欧美粗暴jizz性欧美20| 99视频精品全国免费| 久久精品色图| 欧美午夜精品理论片a级大开眼界| 国产一区二区三区的电影| 亚洲美女在线视频| 欧美综合国产精品久久丁香| 亚洲国产美女久久久久| 羞羞答答国产精品www一本| 欧美久久一级| 在线不卡中文字幕| 性色一区二区| 亚洲精品免费电影| 久久免费99精品久久久久久| 国产精品女主播| 日韩亚洲一区在线播放| 久久精品国产亚洲5555| 亚洲免费精品| 免费成年人欧美视频|