문제

나는 내가 단순한 것을 놓친 것을 알고 있습니다. 나는이 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# 코드를 진행할 때 디버거가 평가됩니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top