|
hr = pDocument->QueryInterface(IID_IHTMLDocument2, (void**)pDoc); <== 요기서 에러가 납니다.
여기서 이부분을 수정하시면 되지 않을까요?
(void**)을 (LPVOID *)로 변경
(void**) ====> (LPVOID *) 로 변경
hr = pDocument->QueryInterface(IID_IHTMLDocument, (LPVOID *) &pDoc);
hr = pDocument->QueryInterface(IID_IHTMLDocument2, (LPVOID *) &pDoc);
/////////////////////////////////////////////////////////////////////////////////////////
IDispatch *pDocument=CppWebBrowser1->Document;
IHTMLElement *HTMLElement;
IHTMLDocument2 *pDoc;
HRESULT hr;
WideString HTML;
WideString Text;
hr = pDocument->QueryInterface(IID_IHTMLDocument, (LPVOID *) &pDoc);
if(hr == S_OK)
{
hr = pDoc->get_body(&HTMLElement);
if(hr == S_OK)
{
HTMLElement->get_innerHTML(&HTML);
HTMLElement->get_innerText(&Text);
HTMLElement->Release();
}
pDoc->Release();
}
Memo1->Align = alClient;
Memo1->Lines->Clear();
Memo1->Lines->Add(HTML);
/////////////////////////////////////////////////////////////////////////////////////////
이렇게 했는데 에러없이 잘 되는 것 같습니다. ^^~
-------------------------------------------------------------------------------------------------
qwer 님이 쓰신 글 :
: 답변해 주셔서 감사합니다.
: 처음 실행시에 Navigate를 통해 웹 페이지를 불러오는데도 동일한 현상이 발생합니다.
: 빌더 2006에서 무언가 달라지지 않았나 하는 생각을 조심스레 해봅니다 ㅜ_-
:
: 김태선 님이 쓰신 글 :
: : &를 넣어도 나는 에러라고 하셔서 보니
: : HTML을 얻는 소스는 별 이상이 없어 보입니다.
: : 에러는 다른 이유로 나는 것 같군요.
: : 빌더 6까지는 아래와 같은 소스를 가끔 사용합니다.
: : 그런데 빌더 2006에서는 실험을 못해봐서 환경적인 차이인지
: : 아니면 이미 다른 이유로 메모리가 침범 당했는지는 모르겠군요.
: :
: : 참고로, CppWebBrowser1을 폼에 떨궈만 놓고
: : 초기화를 행하지 않은채 쓰려고 하면 말씀하신 에러가 발생합니다.
: : CppWebBrowser1은 반드시 쓰기 전에 한번은 초기화를 해줘야 합니다.
: : 초기화는 아무 웹페이지나 로딩해도 좋고
: : CppWebBrowser1->Navigate(L"about:blank");
: : 식으로 빈페이지를 설정해 줘도 됩니다.
: :
: : 이렇게 사용전 페이지를 로딩해야 하는 이유는
: : 그래야먄 Document COM 객체가 로딩되어 메모리에 올라오기 때문입니다.
: : 그리고난 후에 QueryInterface를 쓸수 있죠.
: :
: : 그럼 성공하세요.
: :
: :
: :
: : qwer 님이 쓰신 글 :
: : : 김태선 님이 쓰신 글 :
: : : : hr = pDocument->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc); <== 요렇게 고치세요.
: : : :
: : : : COM에 대해 개념을 충분히 잡고 만드시면 좋습니다.
: : : :
: : : : 그럼.
: : : :
: : : :
: : : : qwer 님이 쓰신 글 :
: : : : : 웹 브라우저를 이용해 HTML을 읽어온 뒤 HTML을 파일로 저장 후 파싱을 통해 특정 패턴을 찾아내는 프로그램을 만들려고 합니다. 게시판에 올라온 많은 분들의 TCppWebBrowser를 사용한 웹 브라우저 소스를 참고했는데 실행 시 메모리 참조 에러가 납니다. 초보인 저로써는 도대체 뭐가 잘못된 것인지 알수가 없네요.
: : : : : 고수분들의 도움을 바랍니다.
: : : : :
: : : : : 아래는 참고한 소스입니다.
: : : : :
: : : : :
: : : : : ==================================================================================================
: : : : : IDispatch *pDocument=CppWebBrowser1->Document;
: : : : : IHTMLElement *HTMLElement;
: : : : : IHTMLDocument2 *pDoc;
: : : : : HRESULT hr;
: : : : :
: : : : : WideString HTML;
: : : : : WideString Text;
: : : : :
: : : : : hr = pDocument->QueryInterface(IID_IHTMLDocument2, (void**)pDoc); <== 요기서 에러가 납니다.
: : : : : if(hr == S_OK)
: : : : : {
: : : : : hr = pDoc->get_body(&HTMLElement);
: : : : : if(hr == S_OK)
: : : : : {
: : : : : HTMLElement->get_innerHTML(&HTML);
: : : : : HTMLElement->get_innerText(&Text);
: : : : : HTMLElement->Release();
: : : : : }
: : : : : pDoc->Release();
: : : : : }
: : : : : Memo1->Lines->Clear();
: : : : : Memo1->Lines->Add(HTML);
: : : : : ==================================================================================================
: : :
: : : 답변해 주셔서 감사합니다.
: : : 원래 소스에서 &pDoc로 했었는데도 동일한 에러가 발생했습니다.
: : : 제가 이것저것 막 편집하는 과정에서 빠진 것 같네요 -_-;
: : :
: : : 김태선님께서 말씀하신대로
: : : hr = pDocument->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc);
: : :
: : : 이렇게해서 실행해도 동일한 에러가 납니다.
: : : 제가 COM에 대해서 전혀 모르고 VC만 사용해 본 터라 잘 모르겠습니다.
: : : (만해님의 OleVarient인가? 하는 버전으로 해봤는데도 실행시에 에러가 발생합니다.)
: : : 혹시 빌더 버전에 따라 틀린건가요?
: : : 제가 사용하는 빌더는 2006입니다.
: : :
: : : 답변 부탁드립니다.
|