성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
[공진영] 안녕하세요 좋은글 감사합니다. 현재 제가 wpf로 관제 모...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
며칠 전에 메일로 어떤 분이 IWebBrowser2에서 IHTMLDocument2는 구할 수 있겠는데, 그 반대는 어떻게 하는지 모르겠다고 도움을 청하는 메일을 보내오셨습니다.<br /> <br /> 저도 예전에 상호 변환을 해본 적이 있다가 마냥 잊고 살았었는데, 그 메일을 계기로 이것저것 "맨땅에 헤딩"을 해보았습니다. 예전에도 그렇게 해서 얻은 기억이 났거든요. ^.^<br /> <br /> 여러분은 IHTMLDocument2에서 IWebBrowser2를 어떻게 구하시겠습니까? MSDN Library에도 나와 있지 않던데... 아래의 해답을 보시기 전에... 여러분도 한번 IHTMLDocument2에서 이것저것 QueryInterface 조작을 해보십시오. ^.^ 재미있으실 겁니다.<br /> <br /> 어쨌든, 두 가지 예제를 다 올려놓겠습니다.<br /> <br /> <span class="subLastTitle">== 1. IWebBrowser2에서 IHTMLDocument2 인터페이스 구하기 ==</span><br /> <br /> <pre> 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; } </pre> <br /> <span class="subLastTitle">== 2. IHTMLDocument2에서 IWebBrowser2 인터페이스 구하기 ==</span><br /> <br /> <pre> 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; } </pre>
첨부파일
스팸 방지용 인증 번호
8675
(왼쪽의 숫자를 입력해야 합니다.)