나는 여러 인터페이스를 가지고 있습니다. IA, IB, IC 등의 공통 속성을 공유합니다. 대지. 이러한 인터페이스에 대한 코드를 재사용하는 방법을 알고 싶습니다. COM 집계에 대한 응답을 저에게 보내주십시오.ATL COM - 인터페이스 메서드 코드 재사용 방법
현재 구현은 다음과 같다 : 내가 달성하고자하는 (그러나 수)은 다음과 같다 무엇
class CA
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class BA
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class CC
// ATL specific...
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
.
template<typename T>
class SharedProperties
{
STDMETHODIMP get_Site(...) {...}
STDMETHODIMP put_Site(...) {...}
}
class CA :
// ATL specific...
SharedProperties<CA>
{
// properties are inherited and are accessible from IC
}
class BA
// ATL specific...
SharedProperties<CB>
{
// properties are inherited and are accessible from IB
}
class CC
// ATL specific...
SharedProperties<CC>
{
// properties are inherited and are accessible from IA
}
나는 (
http://vcfaq.mvps.org/com/7.htm을)를 읽은 후이 아이디어를 통해 들어 왔지만 사이트는 작업 예제를 가지고 있지 않으며, 아무리 내가 노력 얼마나 내가이 일을 얻을 수 없었다. 나는 순수 가상 함수 인 get_Site와 put_Site가 구현되지 않았기 때문에 ("두 번째 스 니펫 당)"추상 클래스를 인스턴스화 할 수 없다.
편집 참고 VS2010을 사용하고 있습니다. 컴파일러는 방법 get_Site
및 put_Site
이 인터페이스의 메소드를 구현하는 것이 모르는
class ATL_NO_VTABLE CArticle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CArticle, &CLSID_Article>,
public IDispatchImpl<IArticle, &IID_IArticle, &LIBID_GeodeEdiLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CArticle()
{
}
어떤 클래스가 추상 클래스이며 인스턴스화 할 수 없습니까? – sharptooth
'SharedProperties :: get_Site'와'SharedProperties :: put_Site'가 가상일까요? –
ATL에 익숙하다면 그 점을 알게 될 것입니다. 스 니펫은 실제 소스 코드가 아닙니다. 설명 목적으로 만 존재합니다. – Telemat