3. Implementation/COM & ActiveX

_com_ptr_t 스마트 포인터 클래스

SSKK 2008. 10. 9. 23:30

_com_ptr_t 스마트 포인터 클래스

           스마트 포인터 기능을 갖고 있는 템플릿 클래스

COMIP.H 헤더 파일에 정의

 

_COM_SMARTPTR_TYPEDEF 매크로를 이용하여 Ptr이 붙는 _com_ptr_t 클래스를 정의

 

_COM_SMARTPTR_TYPEDEF(IHello, __uuidof(IHello));

 

위의 매크로는 다음과 같이 확장 된다.

 

typedef _com_prt_t<_com_IID<IHello, __uuidof(IHello> > IHelloPtr;

 

_com_ptr_t 스마트 포인턴 클래스를 사용하여 COM 객체의 인스턴스 생성 방법

 

1.     생성자 이용

 

struct __declspec(uuid(“6B399539-6141-47ec-BC63-1DEFEFA78290”)) Hello;

 

IHelloPtr pIHello(__uuidof(Hello));

 

또는

 

extern “C” const GUID __declspec(selectany) CLSID_Hello =

{ 0xcb2c32ac, 0xe2fc, 0x4db0, { 0x95, 0x4b, 0x21, 0x50, 0x99, 0xb, 0xda, 0x91 } };

 

IHelloPtr pIHello(CLSID_IHello);

 

또는

 

IHelloPtr pIHello(“HelloServer.Hello.1”);  // prog id

 

2.     CreateInstance 함수 이용

 

HRESULT hr;

IHelloPtr pIHello;

 

hr = pIHello.CreateInstance(__uuidof(Hello));

if (SUCCEEDED(hr))

 

또는

 

hr = pIHello.CreateInstance(CLSID_Hello);

if(SUCCEEDED(hr))

 

hr = pIHello.CreateInsance(“HelloServer.Hello.1”);

if(SUCCEEDED(hr))

 

명시적으로 인터페이스 포인터를 해제하고자 할 경우 다음과 같이 할 수 있다.

 

IHelloPtr pIHello(__uuidof(Hello));

IGoodbyePtr pIGoodbye = pIHello;

 

pIGoodbye = 0;

pIHello = 0;

 

또는

 

pIGoodbye.Release();

pIHello.Release();

 

 참고 : 전병선의 Component Development with Visual C++ & ATL