CComBSTR

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

名稱解釋

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],則同樣的代碼將不會導致泄漏。

相關詞條

相關搜尋

熱門詞條

聯絡我們