[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 类型,这样,包装类就会更加易于使用
[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 类型,这样,包装类就会更加易于使用
本文详细解析了COM自动化组件中[in], [out], [out, retval]参数的含义及使用场景,通过实例展示了如何在VC中生成包装类,特别强调了[out, retval]参数对返回类型的影响,使包装类更易于使用。

6355

被折叠的 条评论
为什么被折叠?



