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
[28196] 엑셀종료후 프로세스가 안죽는 상황
HoHoMaN [chungsg] 2038 읽음    2003-12-14 11:59
안녕하세요 엑셀을 이용해서 그리드의 내용을 출력하는 코딩을 했습니다. 수행은 잘되는데 호출한 프로그램의 프로세스가 죽지 않네요 무슨 문제가 있는건지 알고 싶습니다.

참고로 호출하는 프로세스는 DLL로 작성했답니다. 폼이 호출될때 그리드마다 팝업메뉴를 동적으로 생성하고 거기에 사용자정의 이벤트를 걸어 엑셀을 저장하게 하는 DLL을 만들어 사용하는데 엑셀을 가동하고 저장까지 잘한다음 엑셀을 잘 죽이는것까지는 성공여.
그런데 호출한 녀석의 프로세스가 안죽고 지속되는게 문제임다.
혹시 아시는 분 계시면 도움을 부탁드립니다.

*참고로 아래쪽에 저장하는 구문을 삭제하면 프로세스도 죽더군요. 저장을 하면 뭔가 내부적으로 변화가 생기는건지 쩝.

<호출하는 프로세스>
TKFSExcelControl * xlControl = new  TKFSExcelControl();
xlControl->fnExcelExport((TAdvStringGrid *)pComponent, ((TAdvStringGrid *)pComponent)->Hint);
delete xlControl;

<Excel처리 Class>
TKFSExcelControl::TKFSExcelControl()
{
    ExcelApplication1=new TExcelApplication(0);
    ExcelWorkbook1=new TExcelWorkbook(0);
    ExcelWorksheet1=new TExcelWorksheet(0);
}

TKFSExcelControl::~TKFSExcelControl()
{

    if(ExcelApplication1)
    {
      if(ExcelWorkbook1)
      {
        if(ExcelWorksheet1)
        {
          ExcelWorksheet1->Disconnect();
          delete ExcelWorksheet1;
        }
        ExcelWorkbook1->Disconnect();
        delete ExcelWorkbook1;
      }
    ExcelApplication1->Disconnect();
    ExcelApplication1->Quit();
    delete ExcelApplication1;
    }
}

void __fastcall TKFSExcelControl::fnExcelExport(TAdvStringGrid *grd, AnsiString SheetName)
{
    if(!ExcelApplication1) {
        ShowMessage("Excel을 구동할 수 없습니다");
        return;
    }

    ExcelApplication1->ConnectKind = ckNewInstance;
    ExcelApplication1->Connect();
    ExcelApplication1->set_Visible(0,true);

    ExcelWorkbook1->ConnectKind = ckAttachToInterface;
    ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->Add());
    ExcelWorksheet1->ConnectKind = ckAttachToInterface;

    ExcelWorksheet1->ConnectTo(ExcelApplication1->Worksheets->get_Item((TVariant)1));
    ExcelWorksheet1->set_Name(WideString(SheetName));
    ExcelWorksheet1->Activate();

    for (int i=1; i < grd->RowCount+1; i++)
        for (int j = 1; j < grd->ColCount+1; j++)
        {
            ExcelWorksheet1->Cells->set_Item((TVariant)i,(TVariant)j,(TVariant)grd->Cells[j-1][i-1].c_str() );
        }
    AnsiString fnm = "d:\\"+SheetName+".xls";
    ExcelWorksheet1->SaveAs(WideString(fnm),
    TNoParam(), TNoParam(),
    TNoParam(), TNoParam(),
    TNoParam(), TNoParam(),
    TNoParam(), TNoParam(), TDefLCID());

}

+ -

관련 글 리스트
28196 엑셀종료후 프로세스가 안죽는 상황 HoHoMaN 2038 2003/12/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.