:: SysFreeString()仅在WINDOWS 2008中崩溃

时间:2012-02-28 11:50:36

标签: c++ visual-c++ bstr

我有一个COM代码,我使用BSTR。

因为应用程序在使用:: SysFreeString()

时崩溃了

然而,同样适用于WINDOWS2003,WIN7,WINXP等。

了解导致问题的原因或可能出现的问题。示例代码如下

class CFoo::IUser 
{  
BSTR UserName; 

}
HRESULT CBar::FooMethod(VARIANT *vOut) 
{
//create interface, variant and fill the object.

BSTR bstrname = ::SysAllocString(_T("Username")); 
//use bstrname to fill interface structure.
//finished using now deallocate memory

::SysFreeString(bstrname); // crashing here only in windows 2008 R2 

}

1 个答案:

答案 0 :(得分:3)

我建议停止使用像BSTR这样的原始表格。而是使用封装类(如_bstr_t)封装原始BSTR指针。该类在适当时通过对SysAllocString和SysFreeString以及其他BSTR API的函数调用来管理资源分配和释放。

以下链接的更多信息

http://msdn.microsoft.com/en-us/library/zthfhkd6%28v=vs.80%29.aspx