이제 우리는 CSmartPtr 템플릿 클래스를 사용하여 다음과 같이 클라이언트 코드를 작성할 수 있다.

 

void Foo(IUnknown* pUnk)

{

             HRESULT hr;

             CSmartPtr<IHello> plHello;

 

             hr = pUnk->QueryInterface(IID_IHello, (void**)&plHello);

             //이미 참조 카운터가 증가되었으므로

             //이 시점에서 참조 카운터의 값은 1이다.

             if(hr != S_OK)

             {

                          return;

             }

            plHello->sayHello(...);

 

            CSmartPtr<IHello> plHello2;

            plHello2 = plHello;                                //참조 카운터 == 2

            //plHello2 인스턴스의 operator=() 함수에서 자동으로 AddRef() 메서드를 호출하여

            //참조카운터를 증가시키므로, AddRef() 메서드를 호출할 필요가 없다.

           plHello2->sayHello(...);

 

plHello2 인스턴스의 SmartPtr 클래스 소멸자에서 자동으로 Release() 메서드를 호출하여 참조 카운터를 감소시키므로(참조 카운터 == 1)

Release() 메서드를 호출할 필요가 없다.

 

plHello 인스턴스의 SmartPtr 클래스 소멸자에서 자동으로 Release() 메서드를 호출하여 참조 카운터를 감소시키므로(참조 카운터 == 0)

Release() 메서드를 호출할 필요가 없다. 이 시점에서 Hello COM 객체는 소멸된다.

 

'COMPUTER TECH > COM' 카테고리의 다른 글

스마트 포인터 클래스 - 2  (0) 2010.08.12
스마트 포인터 클래스 - 1  (0) 2010.08.12
문자열을 변환해주는 API 함수  (0) 2010.08.12
COM에서의 문자열 사용  (0) 2010.08.12
CLSIDFromProgID 함수  (0) 2010.08.12
HRESULT 에 대한 내용  (0) 2010.08.12
Posted by ... XJAPAN

댓글을 달아 주세요