在我工作的一些IDL中,我注意到在方法中有两种用于标记返回值的约定 - [in, out]和[out, retval].
似乎[in, out]在有多个返回值时使用,例如:
HRESULT MyMethod(
[in] long InputParam,
[in, out] long* OutputParam1,
[in, out] long* OutputParam2
);
Run Code Online (Sandbox Code Playgroud)
似乎[out, retval]只有一个返回值时使用,例如:
HRESULT MyMethod2(
[in] long InputParam,
[out, retval] long* OutputParam1
);
Run Code Online (Sandbox Code Playgroud)
这是一个COM IDL约定还是我正在使用的代码中的约定?
从2个符号生成的代码是否存在功能差异,或者它们是否完全可互换?
sha*_*oth 25
[in, out]表示在调用方法时传递有效值,并且当方法返回成功时,存在有效值(指针指向的位置).[out]表示在调用方法时指向的值可以是任何值,但在方法返回成功时它将是有效的.两者[out]和[in, out]参数都必须是指针 - 它们的值不变且有效,并且有效性要求仅适用于它们指向的变量.
[out, retval]是一个语法糖,表明在创建Native COM Support包装器时,这个参数应该转换为返回值.例如
HRESULT MyMethod( [out] long* OutParam1, [out, retval] long* OutParam2 );
Run Code Online (Sandbox Code Playgroud)
变
long IWrappedInterface::MyMethod( long* OutParam1 );
Run Code Online (Sandbox Code Playgroud)
如果你没有标记它[retval],包装器将包含一个带有原始签名的方法:
HRESULT IWrappedInterface::MyMethod( long* OutParam1, long* OutParam2 );
Run Code Online (Sandbox Code Playgroud)
只有最后一个[out]参数可以标记为[out, retval].[in, out]参数不能标记为[retval].
| 归档时间: |
|
| 查看次数: |
10521 次 |
| 最近记录: |