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

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 我風 閱讀(1372) 評論(0)  編輯 收藏 引用

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


<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

C++

MyFavorite

搜索

  •  

積分與排名

  • 積分 - 329000
  • 排名 - 75

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 欧美成人精品在线播放| 亚洲国产精品www| 久久手机精品视频| 久久激情久久| 久久亚洲一区二区| 久久夜色精品国产欧美乱极品 | 欧美日韩国产精品成人| 欧美在线一二三四区| 亚洲欧美国产高清| 久久精品国产一区二区三| 久久爱www久久做| 久久精品在线视频| 久久er精品视频| 午夜久久影院| 欧美淫片网站| 亚洲一区三区电影在线观看| 国产精品99久久久久久久久久久久| 欧美黄色精品| 亚洲精品一区二区三区在线观看| 亚洲精品视频在线观看免费| 99精品99| 先锋影音国产一区| 欧美黄色大片网站| 欧美日韩一区精品| 国产精品亚洲美女av网站| 国内成人精品一区| 91久久精品一区| 亚洲无玛一区| 欧美va亚洲va国产综合| 欧美 日韩 国产一区二区在线视频 | 久久99伊人| 久久久久成人网| 欧美国产视频在线观看| 国产精品成人一区| 国产亚洲欧美激情| 亚洲免费观看| 欧美国产高清| 亚洲欧美在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美激情偷拍| 亚洲婷婷在线| 99在线视频精品| 小嫩嫩精品导航| 亚洲第一精品久久忘忧草社区| 欧美成人资源网| 亚洲一区二区四区| 欧美交受高潮1| 狠狠久久亚洲欧美| 亚洲欧美国产一区二区三区| 亚洲国产91| 欧美一区二区三区在线视频| 欧美成人免费一级人片100| 狠狠色综合日日| 午夜精品久久久久久久蜜桃app | 亚洲电影免费观看高清完整版在线| 亚洲风情在线资源站| 日韩视频在线观看| 欧美大片91| 亚洲经典在线| 免费欧美高清视频| 中国成人黄色视屏| 国产精品videosex极品| 亚洲精品一二区| 欧美1区3d| 猫咪成人在线观看| 一区在线观看视频| 久久久99爱| 久久亚洲高清| 一区二区在线视频观看| 久久国产精品99国产| 小处雏高清一区二区三区 | 一本综合精品| 欧美日韩一区二区三区四区五区 | 欧美精品www在线观看| 一区二区三区精密机械公司 | 国产亚洲欧美另类一区二区三区| 亚洲午夜精品17c| 99视频精品在线| 久久亚洲捆绑美女| av成人免费观看| 99精品国产福利在线观看免费 | 国产欧美日韩另类一区| 性欧美xxxx大乳国产app| 在线亚洲免费| 国产精品久久久久久影视| 亚洲一区二区三区777| 蜜桃av一区二区三区| 欧美激情第10页| 欧美日韩亚洲免费| 亚洲视频在线观看| 一区二区三区国产在线| 欧美成人资源| 亚洲在线一区二区| 亚洲香蕉网站| 国产一区二区三区免费观看| 欧美成人性生活| 欧美精品色综合| 午夜精品亚洲| 欧美成人免费小视频| 亚洲免费一在线| 欧美一区免费| 亚洲午夜一二三区视频| 午夜精品久久久久久久久久久久| 国产精品一区在线观看| 久久免费视频这里只有精品| 久久裸体视频| 午夜精品国产更新| 久久久亚洲午夜电影| 亚洲日本一区二区三区| 午夜精品久久久久久99热软件| 国精产品99永久一区一区| 欧美国产日韩二区| 国产欧美视频一区二区三区| 欧美二区不卡| 国产精品日韩专区| 久久精品午夜| 欧美日韩亚洲高清一区二区| 久热re这里精品视频在线6| 久久精品一区二区三区中文字幕| 日韩视频一区| 欧美主播一区二区三区| 在线一区二区三区四区五区| 美女被久久久| 欧美在线网站| 欧美日韩精品是欧美日韩精品| 久久精品一区二区三区不卡牛牛 | 亚洲欧美美女| 亚洲精品九九| 久久综合给合| 午夜久久资源| 欧美日韩不卡| 久久精品一级爱片| 国产精品对白刺激久久久| 欧美成人久久| 欧美了一区在线观看| 亚洲福利视频三区| 国产有码在线一区二区视频| 一区二区电影免费观看| 一区二区三区高清在线| 能在线观看的日韩av| 麻豆精品视频在线| 激情久久综艺| 欧美影院精品一区| 先锋影音一区二区三区| 国产视频精品xxxx| 亚洲欧美日韩视频一区| 老牛影视一区二区三区| 亚洲一区二区3| 欧美日韩人人澡狠狠躁视频| 91久久久久久国产精品| 亚洲乱码精品一二三四区日韩在线| 午夜精品久久久久久久久久久| 香港久久久电影| 激情成人av在线| 欧美成人性网| 亚洲丝袜av一区| 久久精品国产免费观看| 亚洲电影免费在线观看| 欧美日本网站| 欧美一区二区观看视频| 欧美激情中文不卡| 亚洲自拍高清| 娇妻被交换粗又大又硬视频欧美| 久久免费视频在线| 亚洲美女色禁图| 久久久亚洲精品一区二区三区| 激情综合自拍| 欧美三级韩国三级日本三斤| 午夜精品久久久久| 亚洲国产高清高潮精品美女| 亚洲男同1069视频| 在线看无码的免费网站| 欧美视频一区二区三区| 久久久久久午夜| 亚洲天堂av在线免费| 欧美成人免费全部| 性伦欧美刺激片在线观看| 亚洲理论在线观看| 狠狠综合久久| 国产精品久久久亚洲一区| 麻豆成人在线播放| 小处雏高清一区二区三区| 日韩视频专区| 欧美岛国激情| 久久久久久香蕉网| 亚洲影院在线观看| 亚洲精品在线观看免费| 狠狠狠色丁香婷婷综合久久五月 | 国产精品嫩草99a| 国产欧美日韩中文字幕在线| 久久久国产成人精品| 亚洲免费成人av电影|