看流星社区

 找回密码
 注册账号
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
查看: 138|回复: 8

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, 2020-3-31 00:39

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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