在我使用的一些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