3
我相信下面以_bstr_t導致內存訪問衝突錯誤爲false參數(FCOPY)導致的內存被釋放了的CComBSTR:轉換的CComBSTR與FCOPY假
CComBSTR myCComBSTR;
string strMyCComBSTR = string(_bstr_t(myCComBSTR, false));
不過,我不明白爲什麼這是爲MSDN文檔說以下有關FCOPY:
如果爲false,BSTR參數是附加到新的對象 沒有 通過調用 SysAllocString製作副本。
我的問題是:
- 我是說得很對,這是一個問題
- 如果是這樣 - 爲什麼?
感謝
+1如果我們使用BSTR而不是CComBSTR,這也會成爲問題嗎?我假設不是因爲BSTR是一個原始的ptr,所以如果它超出了範圍,它不會釋放內存? – 2010-08-04 10:38:13
@David Relihan:你是說像這樣的(BSTR)什麼東西投給BSTR?這將取決於。在你的情況下,只要不改變fcopy就可以了。 – sharptooth 2010-08-04 11:23:26
@David你也可以這樣做:'string strMyCComBSTR = string(_bstr_t(myCComBSTR.Detach(),false));'如果你以後不打算使用'myCComBSTR' – 2012-09-20 17:57:28