IDL

2017-10-17 2 views
2

I'm learning how to write C# from IDL의 반환 값과 내가 얻지 못한 것은 반환 값이 [out, retval]로 매개 변수 목록에 정의 된 이유입니다. 상식은 HRESULT가 반환 형식이어야하지만 C#의 코드에는 아무런 영향을주지 않는 것으로 보입니다.IDL

답변

1

COM은 예외를 지원하지 않습니다. 그것들은 매우 강력한 언어 런타임 구현 세부 사항이며 C# 예외는 C++ 예외가 아닙니다. 그것은 HRESULT를 매우 중요하게 만든다. 모든 COM 메서드는 오류 코드를 반환해야하고 음수 값은 실패를 나타냅니다.

그러나 많은 언어가 예외를 지원합니다. 언어 런타임이 실패 HRESULT를 예외로 만들도록 허용합니다. 따라서 반환 값은 더 이상 필요하지 않습니다.

형식 라이브러리 가져 오기 도구와 CLR에서 메서드 서명을 다시 작성할 수 있습니다. 유용한 반환 값을 가진 "정상적인"함수처럼 보이게 만듭니다. [retval] 속성은 이것을 나타냅니다. 그것 없이는 void를 반환하는 정상적인 메소드가됩니다.

[PreserveSig] 속성의 관련성에 대해서도 설명하고이 재 작성을 억제합니다. HRESULT가 성공을 나타 내기 위해 0 이상을 리턴 할 때 때때로 필요합니다. COM 반복자는 예를 들어 Next() method에 필요합니다.