標籤: 暫無標籤

1 CComBSTR -概述

  ATL 類 CComBSTR 提供對 BSTR數據類型的包裝。

  標準BSTR是一個有長度前綴和null結束符的OLECHAR數組。BSTR的前4位元組是一個表示字元串長度的前綴。BSTR長度域的值是字元串的位元組數,並且不包括0結束符。

附註

  CComBSTR 類提供了一大批帶 ANSI 或 Unicode 字元串作為參數的成員函數 (構造函數、 賦值運算符和比較運算符)。這些函數的 ANSI 版本比 Unicode版本 效率較低,因為臨時 Unicode 字元串通常內部創建。為了提高效率,儘可能使用 Unicode 版本。

2 CComBSTR -使用注意事項

轉換問題

  雖然一些CComBSTR 方法自動將 ANSI 字元串參數轉換為 Unicode,但這些方法總是返回 Unicode 格式的字元串。若要將輸出字元串轉換回 ANSI,請使用 ATL 轉換類。有關 ATL 轉換類的更多信息,請參見 ATL 和 MFC 字元串轉換宏。

範圍問題

  與任何功能完善的類一樣,CComBSTR在超出範圍時將釋放其資源。如果函數返回指向CComBSTR字元串的指針,這會引起問題,因為指針將引用已經釋放的內存。在這種情況下,請使用Copy方法,如下所示。

顯式釋放 CComBSTR 對象

  在對象超出範圍之前,可以顯式釋放包含在CComBSTR對象中的字元串。如果字元串被釋放,則CComBSTR對象無效。

在循環中使用 CComBSTR 對象

  在CComBSTR類分配緩衝區來執行某些運算時,如+=運算符或Append方法,建議不要在緊密型循環內執行字元串操作。在這種情況下,CStringT可提供更好的性能。

內存泄漏問題

  將已初始化的CComBSTR的地址作為[out]參數傳遞到函數會導致內存泄漏。

  在下面的示例中,在函數 OutString 替換為了保存字元串 "Initialized" 而分配的字元串時,該字元串被泄漏。

  CComBSTR bstrLeak(L"Initialized");

  HRESULT hr = OutString(&bstrLeak);

  若要避免泄漏,請在作為[out]參數傳遞地址之前,對現有的CComBSTR對象調用Empty方法。

  請注意,如果函數的參數是[in, out],則同樣的代碼將不會導致泄漏。

相關評論

同義詞:暫無同義詞