我有一个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
}
答案 0 :(得分:3)
我建议停止使用像BSTR这样的原始表格。而是使用封装类(如_bstr_t)封装原始BSTR指针。该类在适当时通过对SysAllocString和SysFreeString以及其他BSTR API的函数调用来管理资源分配和释放。
以下链接的更多信息
http://msdn.microsoft.com/en-us/library/zthfhkd6%28v=vs.80%29.aspx