templatelt; 클래스 자료 >
클래스 CComTearOffObject : 공개 자료
매개 변수
자료
떼어가기 클래스의 CComTearOffObjectBase 및 지원 떼어가기 개체 인터페이스에서 파생。
두 단계로 떼어가기 인터페이스를 구현 하는 ATL ? CComTearOffObject 을 구현 하는 동안 CComTearOffObjectBase 메서드 참조 횟수와 QueryInterface, 처리 IUnknown。
CComTearOffObject 인터페이스에 대 한 쿼리 하는 경우에 인스턴스화되는 별도 개체로 떼어가기 인터페이스를 구현 합니다. 눈물-오프의 참조 횟수가 0이 됩니다 때 삭제 됩니다. 거의 사용, 이후 기본 개체의 모든 인스턴스에 vtable 포인터를 저장 눈물 오프를 사용 하 여 인터페이스에 대 한 떼어가기 인터페이스를 구축 하는 일반적으로。
해당 떼어가기 CComTearOffObjectBase 와 어느 인터페이스 원하는 지원 떼어가기 개체에서 구현 하는 클래스를 파생 해야 합니다. CComTearOffObjectBase 는 소유자 클래스와 스레드 모델에 templatized 이다. 소유자 클래스는 눈물 오프 되 고 구현 하는 개체의 클래스가입니다. 스레드 모델을 지정 하지 않으면 기본 스레드 모델을 사용 하 고 있다。
떼어가기 클래스에 대 한 COM 맵을 만들어야 합니다. 때 ATL 눈물을 인스턴스화하고, CComTearOffObjectlt; 만듭니다.CYourTearOffClass > 또는 CComCachedTearOffObject <CYourTearOffClass>。
BEEPER 샘플에서 예를 들어에서 CBeeper2 클래스는 떼어가기 클래스와 CBeeper 클래스는 소유자 클래스:
cBeeper2 클래스: 공용 ISupportErrorInfo
nbsp;?????????????? 공용 CComTearOffObjectBase <CBeeper>
{
공개:
? CBeeper2() {}
? STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
? {
???? 리턴 (InlineIsEqualGUID(IID_IBeeper,riid))?
???????????? S_OK: S_FALSE를 반환;
? }
BEGIN_COM_MAP(CBeeper2)
???? COM_INTERFACE_ENTRY(ISupportErrorInfo)
? END_COM_MAP()
};
클래스 CBeeper:
? 공공 IDispatchImpl < IBeeper, 및 IID_IBeeper, 및 LIBID_BeeperLib >
? 공공 CComObjectRoot
? 공공 CComCoClass < CBeeper, 및 CLSID_Beeper >
{
공개:
? CBeeper();
? BEGIN_COM_MAP(CBeeper)
???? COM_INTERFACE_ENTRY(IDispatch)
???? COM_INTERFACE_ENTRY(IBeeper)
???? COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
? END_COM_MAP()
...
}
# include lt;atlcom.h>
참고 항목nbsp;CComCachedTearOffObject(&N)