看流星社区

 找回密码
 注册账号
查看: 2149|回复: 1

com参数中的[in][out][retval]含义说明

[复制链接]

该用户从未签到

发表于 2020-2-27 09:53:55 | 显示全部楼层 |阅读模式
[in][out][retval]用于COM自动化组件,主要是用于生成包装类用的

[in]类型表明参数是一个输入参数,所以这个参数不会向外界返回结果

[out]类型表明参数是个输出参数,所以这个参数会向外界返回结果,参数类型只能是指针类型

[out,retval]类型表明参数是个输出参数, retval 必须与 out 联用,并且在参数类表中只有最后一个参数可以被指定为 [out,retval] 属性,包装类会用这个参数的类型作为包装类方法的返回值

我们举个例子
我们在 vc 中引入一个COM组件, vc 会分析 com 组件的类型库信息
假设有一个方法说明如下

[id(1), helpstring("method Foo")] HRESULT Foo([in] long lIn, [out] BSTR* bstrOut, [out,retval] BSTR* bstrResult);

那么vc生成的包装类的方法可能是

BSTR Foo(long lIn , BSTR& bstrOut);

我们看到,由于 bstrResult 具有 [out,retval] 属性,所以生成的包装类的方法返回值不再是 HRESULT类型,而是 BSTR 类型,这样,包装类就会更加易于使用

该用户从未签到

发表于 2020-3-23 13:34:54 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-23 20:42

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表