CComBSTR
CComBSTR
CComBSTR 提供對 BSTR 數據類型的包裝。
ATL 類 CComBSTR 提供對 BSTR數據類型的包裝。
附註
CComBSTR 類提供了一大批帶 ANSI 或 Unicode 字元串作為參數的成員函數(構造函數、賦值運算符和比較運算符)。這些函數的 ANSI 版本比 Unicode版本 效率較低,因為臨時 Unicode 字元串通常內部創建。為了提高效率,儘可能使用 Unicode 版本。
轉換問題
雖然一些 CComBSTR 方法自動將 ANSI 字元串參數轉換為 Unicode,但這些方法總是返回 Unicode 格式的字元串。若要將輸出字元串轉換回 ANSI,請使用 ATL 轉換類。有關 ATL 轉換類的更多信息,請參見 ATL 和 MFC 字元串轉換宏。
範圍問題
與任何功能完善的類一樣, CComBSTR 在超出範圍時將釋放其資源。如果函數返回指向 CComBSTR 字元串的指針,這會引起問題,因為指針將引用已經釋放的內存。在這種情況下,請使用 Copy 方法,如下所示。
顯式釋放 CComBSTR 對象
在對象超出範圍之前,可以顯式釋放包含在 CComBSTR 對象中的字元串。如果字元串被釋放,則 CComBSTR 對象無效。
在循環中使用 CComBSTR 對象
內存泄漏問題
將已初始化的 CComBSTR 的地址作為 [out] 參數傳遞到函數會導致內存泄漏。
在下面的示例中,在函數 OutString 替換為了保存字元串 "Initialized" 而分配的字元串時,該字元串被泄漏。
CComBSTR bstrLeak(L"Initialized");
HRESULT hr = OutString(&bstrLeak);
若要避免泄漏,請在作為 [out] 參數傳遞地址之前,對現有的 CComBSTR 對象調用 Empty 方法。
請注意,如果函數的參數是 [in, out],則同樣的代碼將不會導致泄漏。