2008-10-24 8 views
1

필자는 지금까지 읽었으며 수집 한 것부터, 구성 요소의 인터페이스 구현이 모든 가상 인터페이스를 가져 오는 단일 클래스에 있어야한다는 점을 고려하여 Microsoft COM 및 XPCOM에서 보았습니다. 이 올바른지? 내가 뭘 놓치고 있니?구성 요소의 전체 구현을 두 개의 객체로 나눌 수 있습니까?

각각의 기능을 제공하면서 QueryIterface를 사용하여 자유롭게 전환 할 수있는 여러 객체 (별도의 DLL에있을 수 있음)가있는 방법이 있습니까?

내가 찾고있는 것은 일부 기능을 가진 구성 요소를 갖고 있지만 외부 클라이언트 코드가 새로운 인터페이스를 사용하여 구성 요소의 새로운 확장을 만들 수 있도록 허용하는 것입니다. 이상적으로 이것은 컴포넌트의 현재 소스와 그 구현을 공개하지 않고 발생해야합니다.

답변

1

표준 하이 레벨 래퍼에서 지원되지 않을 수도 있지만 가능해야합니다. 대부분의 래퍼 (ATL, MFC 등)는 COM 개체를 단일 클래스에 매핑하는 기능 만 지원합니다. 그러나 QueryInterface는 다른 포인터를 반환하고 COM 개체 코드를 호출 할 수 있으므로 첫 번째 COM 개체가 다른 DLL을로드하고 다른 개체를 인스턴스화하고 해당 인터페이스 (vtable)에 대한 포인터를 반환 할 수 있습니다.

필자가 아는 한 모든 가능한 저수준 글루 코드를 많이 작성하고있을 가능성이 높습니다.

0

예, ATL은 tear-off interfaces을 지원합니다.이 인터페이스를 요청할 때만 인스턴스화되는 다른 클래스의 인터페이스를 구현할 수 있습니다. 그것은 단지 인터페이스를 전달하기 때문에 별도의 DLL에 넣을 수도 있습니다.

(한 번 요청한 후 cached 일 수도 있음)

관련 문제