描述:
Interface:
GetParm(BSTR* pBstrParm)
{
*pBstrParm = ::SysAllocString("parm");
}
该接口在DCOM中被调用,在客户端该怎样释放DCOM中分配的内存?
::SysFreeString()在客户端掉用有效吗?
初写这些东西,大家赐教哦!
解决方案1:
有很多种方式都可以的:
1)
BSTR tmp = NULL;
try
{
InterfacePtr->GetPara(&tmp);
...//处理
}
catch (...)
{
::SysFreeString(tmp);
}
2)
{
BSTR tmp;
InterfacePtr->GetPara(&tmp);
_bstr_t Para(tmp, false);
...//处理
} //自动由Para释放掉
偶一般都采用第二种。
在com中资源的分配释放一般用如下规则:
1.[in]类型的参数资源,调用者分配,调用者释放
2.[out]类型的,被调用者(服务器)分配,调用者释放
3.[in,out]类型的,调用者分配,调用者释放,但是中间被调用者可以重新分配其资源,即新释放旧资源再分配新的资源
*pBstrParm = ::SysAllocString("parm");
应该为:
*pBstrParm = ::SysAllocString(L"parm");
如果上面你的函数在idl中声明参数为[out],那就没错了