在我使用的一些IDL中,我注意到在方法中标记返回值有两种约定 - [in, out]
和[out, retval]
。COM IDL定义中的[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约定,或者仅仅是我正在使用的代码中的约定?
从2个符号生成的代码是否存在功能差异,还是它们是完全可互换的?
感谢您的有用解释。 – LeopardSkinPillBoxHat 2009-10-16 05:26:40
我想补充一点,'[in,out]'可能无法被所有语言正确处理(更具体地说,老派的Visual Basic,对.NET的不确定)。 – 2009-10-16 09:58:16
我想知道[out,retval]是否违背了定义COM接口的最佳实践,因为如果执行失败,无法获取错误代码(HRESULT)? – dave 2014-05-28 14:47:48