COM 参数有in, out ,retval.

COM 参数有in, out ,retval. 其主要作用:
  In 输入参数,它的值不被返回  
  Out 输出参数,必须是一个成员指针,将返回结果  
  RetVal 返回值,返回的值不能显示到用户向导中

[in]类型表明参数是一个输入参数,所以这个参数不会向外界返回结果
[out]类型表明参数是个输出参数,所以这个参数会向外界返回结果,而且传入参数时,可以将变量设置为NULL
[out,retval]类型表明参数是个输出参数,且会返回类中数据成员的值

那么从[out],[retval]类型的参数可以获取参数改变后的值,则函数的执行结果从函数的返回类型HRESULT来获得
     
   就Out,RetVal,都是返回值 ,具体区别在哪?
  • RetVal只是Out的一种特殊情况,对于wrapper class在碰到RetVal时,会将其作为一个返回值来处理,对调用方就可以直接拿它当函数的返回值,而不需要再用一个传出参数来接收返回的信息。
  • 在一个过程或函数当中RetVal,最多只能有一个。但是Out/in可以有多个(当然也不是无限的)。
  • [out,retval]表示参数方向是输出,同时可以作为函数运算结果的返回值。一个函数中,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位置。
  • [in]类型表明参数是一个输入参数,所以这个参数不会向外界返回结果
    [out]类型表明参数是个输出参数,所以这个参数会向外界返回结果,而且传入参数时,可以将变量设置为NULL
    [out,retval]类型表明参数是个输出参数,且会返回类中数据成员的值

    那么从[out],[retval]类型的参数可以获取参数改变后的值,则函数的执行结果从函数的返回类型HRESULT来获得
    [in]类型表明参数是一个输入参数,所以这个参数不会向外界返回结果
    [out]类型表明参数是个输出参数,所以这个参数会向外界返回结果,而且传入参数时,可以将变量设置为NULL
    [out,retval]类型表明参数是个输出参数,且会返回类中数据成员的值
  • 那么从[out],[retval]类型的参数可以获取参数改变后的值,则函数的执行结果从函数的返回类型HRESULT来获得

使用ATL创建COM组件时,需要标明参数的类型为[in]、[out]或者[out,retval]。
通过Init方法返回一个BOOL型变量,
在IDL中的代码是:
HRESULT Init([out,retval]BOOL* result);
函数体为:
STDMETHODIMP CBrowserAD::Init(BOOL *result)
{
...
*result = true
return S_OK;
}
在COM客户端,这样使用的:
首先定义 BOOL* t;

得到Init函数中的返回值*result:

用2的方法,类型转换一下就可以了
*t = (BOOL)m_BrowserAD->Init();
*t = (BOOL)m_BrowserAD->Init();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值