C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[62326] Re:Re:Re:Re:Re:Re:Re:CppWebBrowser 미치겠네요..
locke [syiware] 1622 읽음    2010-09-03 16:07
원인을 알수도 없고 dll이라 디버깅도 힘들고..해결은 했습니다.

해결은..해당 브라우저만 띄우는 폼을 따로 dll로 분리해서 dll폼 안에서 또 다른 dll을 호출해서 띄우는 방식으로..

해결은 해야하고..원인은 막막하고..시간은 없고.. 어쩔 수가 없네요.

뭔가 내부적으로 꼬인듯 싶습니다.

-locke

locke 님이 쓰신 글 :
: dll자체를 호출하는 부분은 따로 있고 아래 소스는 dll 내부구현 소스입니다.
:
: 아무래도 뭔가 다른 문제가 있는듯 싶네요.
:
: -locke
:
: 김태선 님이 쓰신 글 :
: : 혹시 아래 코드가 DLL이 아닌 EXE 쪽에 있지 않나요?
: : 그러면 문제가 됩니다.
: :
: : 아래 코드를 DLL 부에서 실행하게 함수로 만들어 옮기고
: : EXE쪽에서는 그 함수를 호출하는 방법을 써 보세요.
: :
: : 메모리 관리자가 DLL, EXE 각각이기 때문에, 서로 섞이게 하면 안됩니다.
: :
: : 그외 문제라면 저도 모르겠군요.
: :
: :
: : locke 님이 쓰신 글 :
: : : 저도 그게 정상이라고 생각합니다.
: : :
: : : 잠깐 소스좀 올려볼께요. 호출부분입니다.
: : :
: : :   frmAgree = new TfrmAgree(Application);
: : :   AnsiString sURL = "http://www.korea.com";
: : :   wchar_t szWC[256] = {0, };
: : :   sURL.WideChar(szWC, 256);
: : :   frmAgree->CppWebBrowser->Navigate(szWC, NULL, NULL, NULL, NULL);
: : :   frmAgree->ShowModal();
: : :   delete frmAgree;
: : :   frmAgree = NULL;
: : :
: : : 아래는 해당 브라우저 창 전체 소스입니다.
: : :
: : : //---------------------------------------------------------------------------
: : :
: : : #include <vcl.h>
: : : #pragma hdrstop
: : :
: : : #include "uAgree.h"
: : : //---------------------------------------------------------------------------
: : : #pragma package(smart_init)
: : : #pragma link "SHDocVw_OCX"
: : : #pragma link "SJImgBtn"
: : : #pragma resource "*.dfm"
: : : TfrmAgree *frmAgree;
: : : //---------------------------------------------------------------------------
: : : __fastcall TfrmAgree::TfrmAgree(TComponent* Owner)
: : :   : TForm(Owner)
: : : {
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TfrmAgree::FormActivate(TObject *Sender)
: : : {
: : :   SetActiveWindow(Handle);
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TfrmAgree::BtnOKClick(TObject *Sender)
: : : {
: : :   Close();
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TfrmAgree::imgTopMouseDown(TObject *Sender,
: : :       TMouseButton Button, TShiftState Shift, int X, int Y)
: : : {
: : :   ReleaseCapture();
: : :   SendMessage(Handle, WM_SYSCOMMAND, 0xf012, 0);
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : 이러니 답답할 따름입니다.  
: : : delete frmAgree; <- 이 문장에서 오류가 나구요.
: : : 딱히 코딩한 것도 없습니다. 저도 빌더 6이구요.
: : : ㅠㅠ
: : :
: : : -locke
: : :
: : : 김태선 님이 쓰신 글 :
: : : : 제가 잠시 실험을 해 봤는데, DLL 로 폼을 만들고 그기 위에
: : : : TCppWebBrowser 올리고 여기서 Navigate 시키게 만들어 놓고,
: : : : 메인 프로그램에서 DLL을 불러
: : : : 해당 폼을 실행해서 네이게이션 되는 것 보고
: : : : 그리고 폼을 종료해서 다시 돌아왔는데
: : : : 아무런 문제도 발생하지 않는군요.
: : : : 일반적인 사이트는 폼 종료시 다른 작업을 해주지 않아도, 어떤 문제도 발생하지 않습니다.
: : : :
: : : : 코드를 차근히 찾아보시기를...
: : : :
: : : : 참 제가 실험한 것은 빌더6 입니다.
: : : :
: : : :
: : : : locke 님이 쓰신 글 :
: : : : : Navigate안하고 그냥 컴포넌트만 올려놓고 띄워도 마찬가지입니다.
: : : : : 예전에는 이런 문제가 전혀 없었는데 갑자기 문제가 생기니까 답답할 따름입니다.
: : : : : 그냥 컴포넌트만 얹어서 컴파일하고 창 띄웠는데도 닫을때 오류가 나니
: : : : : 이걸 뭐 어떻게 처리를 할 수도 없고..
: : : : : -locke
: : : : :
: : : : : 김태선 님이 쓰신 글 :
: : : : : : TCppWebBrowser 은 MS의 WebBrower COM 객체를 래핑한 것입니다.
: : : : : : 빌더는 COM의 경우 그 해제를  책임져 주지 않습니다.
: : : : : : 그 속의 여러가지 요소들이 종료될 수 있도록
: : : : : : 해당 폼이 종료하기 전에 COM 객체를 먼저 종료해주어야 할 것입니다.
: : : : : :
: : : : : : 방법은 찾아보시길..
: : : : : :
: : : : : :
: : : : : : locke 님이 쓰신 글 :
: : : : : : : dll에서 창을 띄웁니다.
: : : : : : :
: : : : : : : 해당 창에는 TCppWebBrowser 가 하나 있고 거기서 특정 url의 내용을 Navigate() 하는게 전부입니다.
: : : : : : :
: : : : : : : 닫기 버튼 클릭하면 Close()해주고 호출부에서 delete 로 폼 객체 해제해주고..근데 해제할때
: : : : : : :
: : : : : : : abnormal program termination 창 뜨고 그 이후부터 계속 Access Violation..창이 주루르...
: : : : : : :
: : : : : : : 테스트 해보니..이 컴포넌트만 제거하고 컴파일해서 띄워보면 오류없이 잘 창이 닫힙니다.
: : : : : : :
: : : : : : : 근데 이놈만 얹으면...폼 닫고 메모리에서 해제(delete)할때 위와 같이 오류가 나네요.
: : : : : : :
: : : : : : : vmware에서 vista로 테스트 중입니다. 뭐가 원인인지 모르겠네요.
: : : : : : :
: : : : : : : 혹시 이걸 대체할 수 있는 기능이나 컴포넌트가 있을까요? 꼭 구현해야되는데
: : : : : : :
: : : : : : : 오류가 나니 원..ㅠㅠ
: : : : : : :
: : : : : : : -locke

+ -

관련 글 리스트
62310 CppWebBrowser 미치겠네요.. locke 1597 2010/09/03
62324     Re:CppWebBrowser 미치겠네요.. 아제나 1520 2010/09/03
62327         Re:Re:CppWebBrowser 미치겠네요.. locke 1813 2010/09/03
62315     Re:CppWebBrowser 미치겠네요.. 김태선 1244 2010/09/03
62317         Re:Re:CppWebBrowser 미치겠네요.. locke 1164 2010/09/03
62319             Re:Re:Re:CppWebBrowser 미치겠네요.. 김태선 1124 2010/09/03
62320                 Re:Re:Re:Re:CppWebBrowser 미치겠네요.. locke 1348 2010/09/03
62322                     Re:Re:Re:Re:Re:CppWebBrowser 미치겠네요.. 김태선 1346 2010/09/03
62323                         Re:Re:Re:Re:Re:Re:CppWebBrowser 미치겠네요.. locke 1367 2010/09/03
62326                             Re:Re:Re:Re:Re:Re:Re:CppWebBrowser 미치겠네요.. locke 1622 2010/09/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.