IDL에서 C#에서 C#에서 BOOL을 전달하는 방법
문제
나는 내가 단순한 것을 놓친 것을 알고 있습니다. 나는이 com에 대한 경험이 없습니다.
IDL의 인터페이스 내 에서이 작업을하고 싶습니다.
[id(5), helpstring("Returns true if the object is in a valid state.")]
HRESULT IsValid([out, retval] boolean bValid);
그러나 이것은 다음과 같습니다. [out] 매개 변수는 포인터가 아닙니다.
좋아요, 이해합니다.
그러나 이것을 구현하는 C# 코드에서는 IsValid () 메소드에서 부울*을 반환 할 수 없습니다.
부울 가치를 반환하는 올바른 방법은 무엇입니까?
해결책
노력하다:
HRESULT IsValid([out, retval] VARIANT_BOOL *bValid);
출력으로 작동하려면 값에 대한 포인터 여야합니다. 이것이 C ++ 측에 기록되는 방법입니다.
*bValue = VARIANT_TRUE;
유형을 다음과 같이 쓸 수 있는지 모르겠습니다. boolean
- 나는 본 적이있다 VARIANT_BOOL
사용 중.
C# 측면에서는 다음과 같습니다.
public bool IsValid()
다시 말해, 런타임 호출 래퍼 (RCW)는 메소드 서명의 "더 좋은"버전을 구현하고 안전하지 않은 번역을 처리합니다. C ++ 구현이 반환되는 경우 E_FAIL
(또는 E_WHATEVER
), 그러면 RCW의 방법이 ComException
.
추가를 고려할 수도 있습니다 [propget]
속성 IsValid
방법 대신 속성으로 제공됩니다. 다른 속성과 마찬가지로 평가가 저렴하고 부작용이없는 경우에만이 작업을 수행합니다 (C# 코드를 진행할 때 디버거가 평가됩니다).
제휴하지 않습니다 StackOverflow