如何从COM接口返回字符串

duguqiubai0823 2007-11-21 01:50:25
如题目所示,我想通过COM接口将一个字符串返回,应该使用什么类型的参数?
...全文
307 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
duguqiubai0823 2007-11-22
  • 打赏
  • 举报
回复
多谢各位兄弟指点,结帖送分。
一剑 2007-11-21
  • 打赏
  • 举报
回复
对,你说的对,外部调用函数要释放该内存的
在VC中你可以这样调用:
BSTR s1 = ::SysAllocString( L"Hello" );
BSTR s2 = ::SysAllocString( L" world" );
BSTR s3 = NULL;

hr = pFun->Cat( s1, s2, &s3 );
if( SUCCEEDED( hr ) )
{
CString sMsg( s3 );
AfxMessageBox( sMsg );
}

//Cat() 最后一个参数是 [out] 方向属性,因此需要调用者释放
if( s3 ) ::SysFreeString( s3 );

VB也是一样要用::SysFreeString释放之
duguqiubai0823 2007-11-21
  • 打赏
  • 举报
回复
to:楼上的,那就是说VB中不用调用SysFreeString去刻意释放内存?
jinyt 2007-11-21
  • 打赏
  • 举报
回复
搂主,放心大胆的用吧,再不需要的时候,VB回自己释放的。
duguqiubai0823 2007-11-21
  • 打赏
  • 举报
回复
titilima兄弟,我在VB中调用SysFreeString函数,提示函数没有定义。
我在VB中已经load WinAPI了。
SysFreeString和SysAllocString是WinAPI吗?
李马 2007-11-21
  • 打赏
  • 举报
回复
> 但是VB中调用此接口方法,如何去释放内存呢?
call SysFreeString
duguqiubai0823 2007-11-21
  • 打赏
  • 举报
回复
一剑兄弟,参数pVal和*pVal传进去的时候是不是都不能为NULL?
*pVal是不是在外面开好内存,方法中只是把字符串拷进去?
还是*pVal以NULL传进去,方法中开内存?
因为我查了MSDN,CComBSTR的Copy方法是
Allocates and returns a copy of m_str.
在方法中开辟了一个内存,然后再将BSTR类型的值拷到新开辟的内存中的。
外面主调函数应该还是要释放内存的吧。
但是VB中调用此接口方法,如何去释放内存呢?

还请再指教,谢谢!!
一剑 2007-11-21
  • 打赏
  • 举报
回复
忘记说了上述方法的in-out类型如下:
HRESULT Cat([in]BSTR s1, [in]BSTR s2, [out,retval]BSTR* pVal);

一个函数中,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位置。
ouyh12345 2007-11-21
  • 打赏
  • 举报
回复
在控件里不会申请内存。
控件只是把字符串拷贝到目的字符串
一剑 2007-11-21
  • 打赏
  • 举报
回复
STDMETHODIMP CFun::Cat(BSTR s1, BSTR s2, BSTR *pVal)
{
CComBSTR sResult( s1 );
sResult.AppendBSTR( s2 );

*pVal = sResult.Copy();

return S_OK;
}
duguqiubai0823 2007-11-21
  • 打赏
  • 举报
回复
楼上的兄弟,我也想过用BSTR*,但是这里好像有个问题。
如果我是跨语言平台调用,有个内存释放问题。
我在VC++里开了一块内存,通过BSTR*传出去,
如果调用者是VB,VB中如何释放VC++中创建的内存呢?

还请楼上兄弟多加指点,谢谢!
ouyh12345 2007-11-21
  • 打赏
  • 举报
回复
错了,BSTR*
ouyh12345 2007-11-21
  • 打赏
  • 举报
回复
BSTR

3,245

社区成员

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

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