【发布时间】:2013-09-12 20:44:32
【问题描述】:
我有一个进程外的 COM 服务器,它具有以下方法:
STDMETHODIMP CMyCom::process(/[out]/BSTR* pResponse);
在这种方法中,我为 pResponse 属性分配内存如下:
*pResponse = ::SysAllocString("一些字符串");
我的问题是,当方法返回时,谁负责释放分配给这个 BSTR 的内存?是 COM 子系统吗?
【问题讨论】:
我有一个进程外的 COM 服务器,它具有以下方法:
STDMETHODIMP CMyCom::process(/[out]/BSTR* pResponse);
在这种方法中,我为 pResponse 属性分配内存如下:
*pResponse = ::SysAllocString("一些字符串");
我的问题是,当方法返回时,谁负责释放分配给这个 BSTR 的内存?是 COM 子系统吗?
【问题讨论】:
STDMETHODIMP CMyCom::process(/*[out]*/BSTR* pResponse);
它必须带有 [out, retval] 才能与 COM 自动化兼容。自动化合约要求调用者在使用字符串后释放它。任何自动化客户端都能做到这一点。
【讨论】: