要將 BSTR 轉為 CString
下列寫法,Compiler並不會報錯
程式也能正確運行
BSTR bstrText = xxx ;
CString str = _com_util::ConvertBSTRToString(bstrText);
但是,程式結束時,會出現 Memory leak
若是不斷運行該段代碼
Memory將會逐漸減少
原因是:
_com_util::ConvertBSTRToString() function 的返回值,其實是 char*
而 CString 會幫 char* 做轉換,自動存入自己變數中
這樣處理,造成了 _com_util::ConvertBSTRToString() 跟系統要到的記憶體,沒有人可以幫忙去釋放
因此 每一次調用該function, Memory就被要走 減少一部分
比較正確的做法 應該要這樣寫:
BSTR bstrText = xxx ;
char *p = _com_util::ConvertBSTRToString(bstrText);
CString str = p;
delete p;
這樣 這塊 memory 有人去 delete他,就不會造成 memory leak了