[펌] IWebBrowser2와 IHTMLDocument2의 상호변환

출처 : http://darkkaiser.cafe24.com/blog/entry/IWebBrowser2%EC%99%80-IHTMLDocument2%EC%9D%98-%EC%83%81%ED%98%B8%EB%B3%80%ED%99%98?TSSESSIONdarkkaisercafe24comblog=1a5a32832891ac1c44665f4a6e85daf3


1. IWebBrowser2 에서 IHTMLDocument2 인터페이스 구하기

IWebBrowser2 *m_pWebFromUnknown;
IWebBrowser2 *m_pWebFromDoc;

STDMETHODIMP CTestObj::SetSite( IUnknown *pUnkSite )
{
    IOleClientSite *pClientSite;
    HRESULT hr;

    hr = pUnkSite-> QueryInterface( IID_IOleClientSite,
    (LPVOID *)&pClientSite );
    if ( FAILED( hr ) ) return S_OK;

    IOleContainer *pContainer;
    hr = pClientSite-> GetContainer( &pContainer );
    pClientSite-> Release();
    if ( FAILED( hr ) ) return S_OK;
   
    IServiceProvider *pServiceProvider;
    hr = pContainer-> QueryInterface( IID_IServiceProvider,
    (LPVOID *)&pServiceProvider );
    pContainer-> Release();
    if ( FAILED( hr ) ) return S_OK;

    hr = pServiceProvider-> QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID *)
                                         &m_pWebFromUnknown );
    pServiceProvider-> Release();
    if ( FAILED( hr ) ) return S_OK;

    LPDISPATCH pDocDisp;
    hr = m_pWebFromUnknown-> get_Document( &pDocDisp );
    m_pWebFromUnknown-> Release();

    return S_OK;
}


2. IHTMLDocument2 에서 IWebBrowser2 인터페이스 구하기
STDMETHODIMP CTestObj::setdoc(LPDISPATCH lpDisp)
{
    /* IHTMLDocument2 인터페이스 포인터에서 IWebBrowser2 인터페이스 포인터를 구합니다. */
    CComQIPtr<  IHTMLDocument2>  pDoc = lpDisp;

    IOleCommandTarget *pCmdTarget = NULL;
    pDoc-> QueryInterface( IID_IOleCommandTarget, (LPVOID *)&pCmdTarget );

    if ( pCmdTarget ) {
        IServiceProvider *pSP;
        HRESULT hr = pCmdTarget-> QueryInterface(
        IID_IServiceProvider, (LPVOID *)&pSP );
        pCmdTarget-> Release();

        if ( SUCCEEDED( hr ) ) {
            hr = pSP-> QueryService(
            SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID *)&m_pWebFromDoc );

        }
    }

    if ( m_pWebFromDoc == m_pWebFromUnknown ) {
        ::MessageBox( NULL, “똑같습니다.”, “IWebBrowser2 인터페이스 포인터 비교”, MB_OK );
    }

    return S_OK;
}

댓글 남기기