스마트포인트를 사용하면 객체가 블럭을 벗어날때 자동 파괴되므로
훨씬 간편하게 프로그램할 수 있고
객체 파괴에 신경이 덜 가므로 편리합니다.
보통 일반적으로는 boost 라이브러리에 있는 스마트포인트인 scoped_ptr 를 사용하면 되는데
이걸 쓰자고 boost 라이브러리를 인스톨하는 것이 번거로운 분은 해당 부분만 때어내 사용하면 됩니다.
이거 때어낸 것은 라이브러리 자료실에 곧 올리겠습니다.
그런데 COM 객체에 대한 스마트포인트는 몇가지를 사용합니다.
제가 다 아는 것은 아니고 실무하다가 사용하는 것을 아래 예제에 일부 표시 했습니다.
아래는 웹브라우즈에서 원하는 부분의 소스를 얻어오고, 해당하는 엘러멘트(요소)를 가져오는 것에 대한 예제입니다.
// WebBrowser를 엑세스 하기 위해
#include <mshtml.h>
// COM 용 스마트포인트를 쓰려면 아랫줄이 있어야 합니다. atlbase.h 에 정의되어 있으므로.
#include <atl/atlbase.h>
HRESULT hr;
IDispatch *pDocument = WebBr->Document;
IHTMLDocument2 *pDoc;
hr = pDocument->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
if (hr == S_OK)
{
CComPtr< IHTMLElement > pBody; // Release를 호출해줄 필요가 없다.
pDoc->get_body( &pBody );
WideString HTML;
WideString HTML2;
WideString Text;
pBody->get_innerHTML(&HTML);
pBody->get_innerText(&Text);
pBody->get_outerHTML(&HTML2);
MemoWebSrc->Lines->Clear();
MemoWebSrc->Lines->Add(HTML2); // 소스 표시
MemoWebSrc->Lines->Add(HTML);
CComQIPtr< IHTMLBodyElement > peBODY( pBody ); // 자동으로 쿼리 인터페이스.
CComBSTR bstrBackground; // SysFreeString을 호출할 필요가 없다.
peBODY->get_background( &bstrBackground ); // 배경그림명을 얻어 온다.
Caption = (String)bstrBackground;
}
너무 짧은 내용이라 도움이 될랑가 모르겠습니다.
이만 ~~~
|