CComBSTR

基本介紹

  • 外文名:CComBSTR
  • 對象: 數據類型
  • 性質數組
  • 長度域:字元串的位元組數
  • 作用:參數的成員函式
  • 使用注意事項:轉換問題,範圍問題
名稱解釋,注意事項,

名稱解釋

ATL 類 CComBSTR 提供對 BSTR數據類型的包裝。
標準BSTR是一個有長度前綴和null結束符的OLECHAR數組BSTR的前4位元組是一個表示字元串長度的前綴。BSTR長度域的值是字元串的位元組數,並且不包括0結束符。
附註
CComBSTR 類提供了一大批帶 ANSI 或 Unicode 字元串作為參數的成員函式 (構造函式賦值運算符和比較運算符)。這些函式的 ANSI 版本比 Unicode版本 效率較低,因為臨時 Unicode 字元串通常內部創建。為了提高效率,儘可能使用 Unicode 版本。

注意事項

轉換問題
雖然一些 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],則同樣的代碼將不會導致泄漏。

相關詞條

熱門詞條

聯絡我們