En algunos de los IDL con los que trabajo, he notado que hay 2 convenciones para marcar valores devueltos en métodos - [in, out]
y [out, retval]
.Diferencias entre [in, out] y [out, retval] en definiciones COM IDL
Parece que [in, out]
se usa cuando hay múltiples valores de retorno, por ejemplo:
HRESULT MyMethod(
[in] long InputParam,
[in, out] long* OutputParam1,
[in, out] long* OutputParam2
);
Parece que [out, retval]
se utiliza cuando sólo hay un único valor de retorno, por ejemplo:
HRESULT MyMethod2(
[in] long InputParam,
[out, retval] long* OutputParam1
);
¿Es esta una convención COM IDL o simplemente una convención en el código con el que estoy trabajando?
¿Hay una diferencia funcional en el código que se generan a partir de las 2 anotaciones, o son completamente intercambiables?
Gracias por la útil explicación. – LeopardSkinPillBoxHat
Me gustaría agregar que '[in, out]' puede no ser manejado correctamente por todos los idiomas (más específicamente, en la vieja escuela de Visual Basic, no estoy seguro acerca de .NET). –
Me pregunto si [out, retval] está en contra de las mejores prácticas para definir interfaces COM ya que no hay forma de obtener el código de error (HRESULT) si la ejecución falla. – dave