_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(); |