com中的一些困惑

贪玩的老鼠 2009-06-01 08:01:50
1. COM 有个对象方法GetXXX(BSTR* pVal);
客户BSTR b; p->GetXXX(&b);是不是要调用SysFreeString释放b,我看有的会调用,有的不会调用,所以很困惑.
2 BSTR cc=SysAllocStringByteLen(psz,10); BSTR tt=cc;我是不是只需要释放cc,就可以了,tt要不要释放啊.BSTR dd=L"ddd";这个应该不用释放的对吧!!
3. 接口问题.我有两个函数void ShowDept(IEmployeePowerPtr p);
void ShowDept2(IEmployeePowerPtr p);
现在
IEmployeePower* p;
hr=CoCreateInstance( CLSID_EmployeePower,NULL, CLSCTX_INPROC_SERVER, IID_IEmployeePower,reinterpret_cast<void**>(&p));
ShowDept2(p);ShowDept(p); 为什么调用p->Release()会出错呢.我应该怎么做呢?

初学COM,多多指教
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyyapple 2009-06-04
  • 打赏
  • 举报
回复
BSTR被定义为
typedef OLECHAR* BSTR;
它的前4个字节包含长度信息

1. 如果pVal是[OUT]参数,函数内部会调用SysAllocString分配空间,调用方,也就是你必须SysFreeString释放b

2. tt不用释放,BSTR dd=L"ddd"; 应该写成BSTR dd=SysAllocString(L"ddd");也要释放

3. 根据S1规则,当调用方把一个非空接口指针通过[in]参数传递给一个函数和方法时,既不需要AddRef,也不需要Relase
1303411 2009-06-02
  • 打赏
  • 举报
回复
关于第三个问题,调用p->Release()出了什么错误呢?
1303411 2009-06-02
  • 打赏
  • 举报
回复
1、是否需要调用SysFreeString,主要看p->GetXXX(&b);内部是如何申请内存的,申请和释放要成对,比如像new和delete,malloc和free。SysAllocString对应的是SysFreeString。
2、tt不用释放,这和C++一样。
oysoft 2009-06-01
  • 打赏
  • 举报
回复
1.是否要调用SysFreeString看BSTR的所用者是谁
2.BSTR tt=cc,这样做tt和cc就同样的东西。释放一个就是是否另一个

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧