社区
ATL
帖子详情
如何从COM接口返回字符串
duguqiubai0823
2007-11-21 01:50:25
如题目所示,我想通过COM接口将一个字符串返回,应该使用什么类型的参数?
...全文
307
13
打赏
收藏
如何从COM接口返回字符串
如题目所示,我想通过COM接口将一个字符串返回,应该使用什么类型的参数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
C#调用C++
接口
返回
字符串
的做法
作者:朱金灿来源:http://blog.csdn.net/clever101 现在有这样一种情景,假如C#调用C++
接口
需要
返回
一个
字符串
。因为
字符串
是不定长的,因此传递一个定长的
字符串
进去是不合适的。 因此需要一种间接的做法,简单来说就是C#定义一个创建空
字符串
的
接口
,传递这个
接口
指针给C++模块,然后在C++模块中调用这个C#
接口
创建一个空的
字符串
接口
。然...
HttpURLConnection 调用get,post
接口
,读取
返回
字符串
场景:工程师A写了一个基于HTTP的
接口
(http://127.0.1.2:8080/test/url?param=12&test=asdf&test)这个
接口
会
返回
Y,或者N 工程师B现在调用这个
接口
的方法,见代码! 我们来使用JDK的UR类,和HttpURLConnection InputStr...
SpringBoot
返回
纯
字符串
的时候,多了双引号的问题解决
做项目遇到奇怪的合作方要求
返回
纯
字符串
报文的,但是我们项目默认
返回
的报文格式都是json格式的,
返回
纯
字符串
格式的报文会出现
字符串
外面又包了双引号的情况。比如本来是要
返回
字符串
SUCCESS的,得到的
返回
结果却是"SUCCESS"。 百度了下,下面这篇博文给了我启发 https://blog.csdn.net/baidu_27055141/article/details/91544019 突破口在 configureMessageConverters 这个方法,这个方法配置了工程使用的消息转.
java
返回
字符串
_java – 如何
返回
一个
字符串
?
import java.util.*;public class HangManP5{public static void main(String[] args){int attempts = 10;int wordLength;boolean solved;Scanner k = new Scanner(System.in);System.out.println("Hey, what's your...
如何在
COM
组件
接口
方法中
返回
一个
字符串
给js?
如何在
COM
组件
接口
方法中
返回
一个
字符串
给js? 2011-05-02 18:54:55| 分类: 默认分类 | 标签: |字号大中小 订阅
COM
组件通过 BSTR* 数据类型将一个
字符串
从
接口
方法内部
返回
给外部js的,如下
接口
方法: HRESULT GetFilePath([out,retval] BSTR* bstrFilePath);
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章