gpt4 book ai didi

com - COM IDL定义中[输入,输出]和[输出,检索]之间的差异

转载 作者:行者123 更新时间:2023-12-04 04:54:29 27 4
gpt4 key购买 nike

在我使用的一些IDL中,我注意到在方法中标记返回值有2个约定-[in, out][out, retval]

当存在多个返回值时,似乎使用了[in, out],例如:

HRESULT MyMethod(
[in] long InputParam,
[in, out] long* OutputParam1,
[in, out] long* OutputParam2
);

似乎只有一个返回值时才使用 [out, retval],例如:
HRESULT MyMethod2(
[in] long InputParam,
[out, retval] long* OutputParam1
);

这是COM IDL约定还是我正在使用的代码中的约定?

由这两种符号生成的代码在功能上是否存在差异,或者它们是否可以完全互换?

最佳答案

[in, out]表示在调用该方法时传递一个有效值,而在该方法返回成功时传递一个有效值(指针指向的地方)。 [out]表示所指向的值可以是调用该方法时的任何值,但是在该方法返回成功时将是有效的。 [out][in, out]参数都必须是指针-它们的值不变且有效,并且有效性要求仅适用于它们指向的变量。
[out, retval]是一种语法糖,用于指示在创建 native COM支持包装器时,应将此参数转换为返回值。例如

HRESULT MyMethod( [out] long* OutParam1, [out, retval] long* OutParam2 );

变成
long IWrappedInterface::MyMethod( long* OutParam1 );

如果您未将其标记为 [retval],则包装器将包含带有原始签名的方法:
HRESULT IWrappedInterface::MyMethod( long* OutParam1, long* OutParam2 );

只有最后一个 [out]参数可以标记为 [out, retval][in, out]参数不能标记为 [retval]

关于com - COM IDL定义中[输入,输出]和[输出,检索]之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com