VARIANT,BSTR,我要疯了 第一种对了第二种的话.......编译能过吗? 这个这个...CComBSTR....有那个那个 CopyTo 方法吗??你是不是想写 m_FileName=bstr.Copy();那样的话, 确实没有释放。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 惭愧,俺一直都用第二种,编译没问题,做出来的COM在VB里用也没问题。CComBSTR有这个CopyTo方法。估计和你说的bstr.Copy()一样的。那怎样释放呢?(第二种) sorry , 我在MSDN文档里没有发现 CComBSTR有 CopyTO 的方法, 就以为没有此方法。后来,看了ATL的源代码,才发现有这个方法。下面是 CommBSTR::CopyTo 的实现代码。 HRESULT CopyTo(BSTR* pbstr) { ATLASSERT(pbstr != NULL); if (pbstr == NULL) return E_POINTER; *pbstr = ::SysAllocStringLen(m_str, ::SysStringLen(m_str)); if (*pbstr == NULL) return E_OUTOFMEMORY; return S_OK; }如果 m_FileName的类型是BSTR的话,我想应该用 bstr.CopyTo(&m_FileName);(有&符)我们已经看到 CopyTo 如何为m_FileName 分配的内存。只要析构时 ::SysFreeString一下就好了,和第一种的释放方法没有区别。不过我觉得如果你这样写会更省事一点, 让 CComBSTR自己管理内存class CLog{ CComBSTR m_FileName; CLog(){ m_FileName=_T("C:\\logger.log"); }} CADORecordset 如何删除记录 问个strcpy简单问题. AfxBeginThread中修改GUI的问题 加入自己写的头文件 VC6中界面的控件Caption用中文,结果运行后显示出乱码,请问这是怎么回事,该如何解决? [HELP]关于气泡窗口的问题(sdk) 两个system modal的对话框,如何将一个始终置在另一个的前面??急!! 我的导师带回N多原版计算机书,有多余的书,这里有人要买吗? 关于数据库备份的问题?? 设置TTL的值为1的问题。 VC CListCtrl 如何显示 UTF-8 编码 再给50分!!!!!!
CComBSTR有这个CopyTo方法。估计和你说的bstr.Copy()一样的。那怎样释放呢?(第二种)
{
ATLASSERT(pbstr != NULL);
if (pbstr == NULL)
return E_POINTER;
*pbstr = ::SysAllocStringLen(m_str, ::SysStringLen(m_str));
if (*pbstr == NULL)
return E_OUTOFMEMORY;
return S_OK;
}
如果 m_FileName的类型是BSTR的话,我想应该用 bstr.CopyTo(&m_FileName);(有&符)我们已经看到 CopyTo 如何为m_FileName 分配的内存。只要析构时 ::SysFreeString一下就好了,和第一种的释放方法没有区别。不过我觉得如果你这样写会更省事一点, 让 CComBSTR自己管理内存
class CLog{
CComBSTR m_FileName;
CLog(){
m_FileName=_T("C:\\logger.log");
}
}