-1

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

在使用 ::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 

}
4

1 回答 1

3

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

更多信息在以下链接

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

于 2012-02-28T12:36:49.823 回答