2012-12-26 91 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