В некоторых IDL, с которыми я работаю, я заметил, что существуют два соглашения для маркировки возвращаемых значений в методах - [in, out]
и [out, retval]
.Различия между [in, out] и [out, retval] в определениях COM IDL
Оказывается, что [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 или просто соглашением в коде, с которым я работаю?
Есть ли функциональная разница в коде, который будет сгенерирован из двух обозначений, или они полностью взаимозаменяемы?
Спасибо за полезное объяснение. – LeopardSkinPillBoxHat
Я хотел бы добавить, что '[in, out]' может не обрабатываться корректно на всех языках (более конкретно, в Visual Basic для старой школы, не уверен в .NET). –
Мне интересно, если [out, retval] против лучшей практики для определения COM-интерфейсов, поскольку нет способа получить код ошибки (HRESULT), если выполнение не выполняется? – dave