문제

코드 검토 .idl 파일 중 하나에서 호기심 많은 정의를 찾았습니다.

[
    object,
    uuid(uuidhere),
    dual,
    nonextensible,
    oleautomation,
    hidden
]
interface IOurInterface : IUnknown {
    //methods here
};

인터페이스가 어떻게 직접 파생 될 수 있습니까? IUnknown 아마도 듀얼 인터페이스 일 수 있습니까? 내가 제거하면 어떤 것이 끊어 질 것입니다 dual 기인하다?

도움이 되었습니까?

해결책

~ 안에 이 답변 마샬링에 관한 또 다른 질문에 사용자 보이 세 ~를 가리키다 이 기사 기본적으로 다음을 나타냅니다.

인터페이스 (idispatch-derived 또는 not)가 표시 될 때 dual 또는 oleautomation (또는 둘 다) 특별히 치료됩니다 RegisterTypeLib() 호출됩니다 (일반적으로 dllregisterserver에 의해 수행됨). 각각의 인터페이스에 대해 {00020424-0000-0000-0000-000000000046} 클래스가 프록시/스텁으로 참조되는 hkcr interface {interfaceid} 키가 만들어집니다. 이 클래스 ID는 Oleautomation Marshaller로도 알려진 Typelib Marshaller에 해당합니다.

다른 팁

여기서 문서를 감안할 때 그것이 효과가있는 이유를 볼 수 없습니다.http://msdn.microsoft.com/en-us/library/aa366807(vs.85).aspx

이중 속성으로 식별 된 인터페이스는 자동화와 호환되어야하며 IDISPATCH에서 파생되어야합니다. 이 속성은 dispinterfaces에서 허용되지 않습니다.

그럴 수 있습니다 [dual] 속성은 암시 적으로 추가됩니다 IDispatch 인터페이스에.

당신이 할 수있는 것은 인터페이스를 구현하는 코드를 점검하는 것입니다 (ATL이라고 가정). IDispatchImpl. 그렇다면 실제로 Qi에 응답합니다 IDispatch 그리고 그렇게 사용될 수 있습니다.

또 다른 대안은 객체 구현을 인스턴스화하는 것입니다 IOurInterface 그리고 qi it IDispatch - 성공하면 아마 제거 할 수 없을 것입니다.

사실, 생각해보십시오 [dual] 기술적으로 당신이 파생 할 것을 요구하지 않습니다 IDispatch 사용자 정의 인터페이스와 IDispatch?

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