2012-12-26 42 views
0

填充BSTRs我有一些代碼,看起來像這樣:我需要釋放由_Type :: get_FullName

_TypePtr spType = NULL; 
. . . // host the CLR and populate that type 
{ 
    BSTR fullName; 
    spType->get_FullName(&fullName); 
    wprintf(L"Got type %s\n", fullName); 
} 

我需要釋放該BSTR?我如何釋放它SysFreeString()?如果不是爲什麼?

+1

簡答:是的。 – WhozCraig

+0

@WhozCraig好的,我該如何釋放它? –

+1

使用['SysFreeString()'](http://msdn.microsoft.com/zh-cn/library/aa909095.aspx)。在你的情況下,一旦完成它,調用'SysFreeString(fullName);' – WhozCraig

回答

1

A BSTRSysAllocString動態分配(如果我正確記得名稱,請檢查它!)。

有相應的釋放功能。

只是閱讀文檔


如果您正在使用Visual C++編譯器,也不要在以往代碼移植到其他編譯器計劃,那麼你可以使用與Visual C++附帶的「智能BSTR」級。我不能完全記得這個名字。但像_bstr_t。等等,檢查文檔...好吧,在索引中輸入「_bstr」提供了名稱,正如我想的那樣,它是_bstr_t! :-)

通過使用「智能」類,它可以爲您處理重新分配。

+0

這在回顧過程中顯而易見。我顯然需要閱讀[Eric的BSTR語義完全指南](http://blogs.msdn.com/b/ericlippert/archive/2003/09/12/52976.aspx) –

+0

'bstr_t'和'ATL :: CComBSTR在這個答案中提到的兩個智能BSTR類都足夠了。 – WhozCraig