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

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   管理


<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
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人片在线观看桃| 国产精品裸体一区二区三区| 午夜老司机精品| 久久精品国产v日韩v亚洲| 在线观看三级视频欧美| 91久久综合| 国产精品久久久久影院色老大| 欧美亚洲网站| 免费久久99精品国产自| 亚洲无限av看| 久久久精品动漫| 在线亚洲激情| 久久精品日韩| 亚洲小视频在线观看| 西西人体一区二区| 99视频超级精品| 香蕉久久夜色精品| 久久久久九九九| a4yy欧美一区二区三区| 亚洲欧美日韩精品| 99视频精品| 欧美中在线观看| 亚洲天堂黄色| 欧美+日本+国产+在线a∨观看| 亚洲一区影音先锋| 免费观看30秒视频久久| 欧美亚洲免费高清在线观看| 久久综合久久综合久久| 欧美日韩亚洲系列| 亚洲第一色在线| 国产一区二区0| 99亚洲伊人久久精品影院红桃| 伊人色综合久久天天| 亚洲自拍三区| 亚洲一区二区av电影| 欧美jizz19hd性欧美| 久久久久久亚洲精品中文字幕| 欧美视频国产精品| 亚洲精品一区二区网址| 尤物在线精品| 久久av资源网| 久久久久国产精品一区| 国产精品有限公司| 一区二区高清| 欧美国产日本高清在线| 欧美激情1区2区| 黄色免费成人| 久久久久久久网站| 久久综合电影| 怡红院精品视频| 久久久久久一区二区| 久久精品成人一区二区三区| 亚洲调教视频在线观看| 亚洲视频免费| 欧美日韩成人一区二区三区| 欧美成人一品| 亚洲理论在线| 欧美福利一区| 亚洲精品乱码久久久久久日本蜜臀| 雨宫琴音一区二区在线| 久久中文在线| 亚洲国产欧美一区二区三区久久| 黄色在线一区| 美女黄网久久| 亚洲国产精品精华液2区45| 最新日韩av| 欧美另类高清视频在线| 99精品热6080yy久久 | 伊人久久亚洲热| 久久国产加勒比精品无码| 久久久噜噜噜久久| 亚洲国产精品va在看黑人| 另类亚洲自拍| 亚洲精品一二三| 新67194成人永久网站| 国产日韩欧美精品一区| 久久精品91久久香蕉加勒比| 免费中文字幕日韩欧美| 亚洲精品中文在线| 国产精品久久| 久久久无码精品亚洲日韩按摩| 欧美成人激情在线| 亚洲一二三区在线| 国产一区二区欧美日韩| 麻豆精品一区二区av白丝在线| 亚洲欧洲一二三| 久久激情婷婷| 日韩一级精品视频在线观看| 国产精品入口夜色视频大尺度| 久久久精品一区| 亚洲日产国产精品| 久久网站免费| 亚洲一区二区精品视频| 韩国av一区二区三区在线观看| 男人的天堂亚洲| 亚洲欧美日韩另类| 亚洲欧洲精品成人久久奇米网| 欧美一区二区三区男人的天堂 | 欧美成人国产va精品日本一级| 一区二区免费在线观看| 久久综合一区二区| 亚洲视频一区二区| 一色屋精品视频免费看| 国产精品成人观看视频免费 | 99精品久久久| 亚洲成色777777女色窝| 欧美资源在线| 亚洲一区二区三区高清 | 国产精品午夜久久| 欧美日本韩国| 欧美成人r级一区二区三区| 新狼窝色av性久久久久久| 亚洲另类一区二区| 欧美成人资源| 久久视频精品在线| 欧美在线免费观看亚洲| 亚洲一区二区三区中文字幕| 亚洲国产一区二区精品专区| 国产亚洲精品v| 国产欧美日韩精品一区| 欧美午夜精品电影| 欧美日韩精品一区二区在线播放| 狂野欧美一区| 老鸭窝亚洲一区二区三区| 欧美一区二区黄色| 香蕉尹人综合在线观看| 亚洲综合色在线| 亚洲一二三区视频在线观看| 99在线|亚洲一区二区| 日韩视频永久免费| 91久久夜色精品国产网站| 欧美福利影院| 欧美国产日韩一区二区在线观看| 久久动漫亚洲| 久久精品国产精品| 久久亚洲高清| 欧美不卡视频一区发布| 免费看黄裸体一级大秀欧美| 毛片av中文字幕一区二区| 美女黄毛**国产精品啪啪| 欧美成人资源| 亚洲国产精品一区| 亚洲狼人综合| 亚洲一区二区三区成人在线视频精品| 99热这里只有精品8| 亚洲自拍16p| 久久精品视频va| 欧美黄色小视频| 国产精品a久久久久久| 国产精品一区二区久久久| 国产视频一区在线| 一区二区三区在线视频免费观看| 有码中文亚洲精品| 日韩视频中文| 欧美亚洲综合网| 免费日韩一区二区| 日韩一级不卡| 午夜精品区一区二区三| 久久免费黄色| 欧美三级免费| 精品不卡一区| 99国内精品久久| 久久国产色av| 亚洲国产欧美国产综合一区| 一本色道久久综合亚洲91| 小黄鸭精品aⅴ导航网站入口| 久久女同互慰一区二区三区| 欧美日韩国产在线观看| 国产亚洲人成网站在线观看| 亚洲激情国产| 欧美一区二区三区在线观看 | 一区二区三区 在线观看视| 午夜在线一区| 亚洲国产午夜| 欧美一级在线播放| 欧美精品福利在线| 激情欧美日韩| 亚洲欧美经典视频| 欧美成人中文字幕在线| 亚洲私拍自拍| 欧美精品免费看| 狠狠色狠色综合曰曰| 亚洲免费视频中文字幕| 欧美成人精品高清在线播放| 亚洲一区二区三区免费观看| 美女日韩在线中文字幕| 国产一区二区三区网站| 亚洲一区二区在线| 亚洲国产精品悠悠久久琪琪| 久久成人18免费观看| 国产精品久久久久久久久久三级 |