Trong một số IDL tôi làm việc với tôi đã nhận thấy rằng có 2 quy ước để đánh dấu các giá trị trả về theo phương thức - [in, out]
và [out, retval]
.Sự khác nhau giữa [in, out] và [out, retval] trong định nghĩa COM IDL
Dường như [in, out]
được sử dụng khi có nhiều giá trị trả về, ví dụ:
HRESULT MyMethod(
[in] long InputParam,
[in, out] long* OutputParam1,
[in, out] long* OutputParam2
);
Dường như [out, retval]
được sử dụng khi chỉ có một giá trị trả về duy nhất, ví dụ:
HRESULT MyMethod2(
[in] long InputParam,
[out, retval] long* OutputParam1
);
Đây có phải là quy ước COM IDL hay chỉ là quy ước trong mã tôi đang làm việc cùng?
Có sự khác biệt về chức năng trong mã sẽ được tạo từ 2 ký hiệu hoặc chúng có thể hoán đổi cho nhau hoàn toàn không?
Cảm ơn lời giải thích hữu ích. – LeopardSkinPillBoxHat
Tôi muốn thêm rằng '[trong, ngoài]' có thể không được xử lý chính xác bởi tất cả các ngôn ngữ (cụ thể hơn, trường cũ Visual Basic, không chắc chắn về .NET). –
Tôi tự hỏi nếu [ra, retval] là chống lại thực hành tốt nhất để xác định giao diện COM vì không có cách nào để có được mã lỗi (HRESULT) nếu thực hiện thất bại? – dave