엑셀의 수식을 이용하기 위해서 다음과 같이 이용중입니다.
class CEXCEL
{
public:
TExcelApplication* m_pExcelApplication;
ExcelWorksheetPtr m_pExcelSheet;
ExcelWorkbookPtr m_pExcelWorkBook;
};
TVariant CEXCEL::GetExcelItem(TVariant& CellCol, TVariant& CellRow)
{
return m_pExcelSheet->Cells->get_Item(CellRow, CellCol);
}
void CEXCEL::SetExcelItem(TVariant& CellCol, TVariant& CellRow, TVariant& Value)
{
m_pExcelSheet->Cells->set_Item(CellRow, CellCol, Value);
}
void CEXCEL::OpenExcel(const char* pFileName, bool bShowWindow)
{
try {
if(m_pExcelApplication!=NULL) {
CloseExcel();
}
m_pExcelApplication=new TExcelApplication(NULL);
m_pExcelApplication->ConnectKind=ckRunningOrNew;
m_pExcelApplication->AutoQuit=true;
m_pExcelApplication->Connect();
if(bShowWindow) {
m_pExcelApplication->set_Visible(0,true);
}
m_pExcelWorkBook=m_pExcelApplication->Workbooks->Open( TVariant(pFileName), TNoParam(),
TNoParam(), TNoParam(), TNoParam(), TNoParam(), TNoParam(), TNoParam(),
TNoParam(), TNoParam(), TNoParam(), TNoParam(), TNoParam(), m_nExcelLCID );
m_pExcelSheet=m_pExcelWorkBook->ActiveSheet;
} catch(const Exception& E) {
CloseExcel();
throw E;
}
}
그런데, 엑실 시트의 ExcelWorksheetPtr->Cells->set_Item, ExcelWorksheetPtr->Cells->get_Item 함수를
호출할 때 마다 개발중인 프로그램과 EXCEL.EXE 프로세스의 메모리가 지속적으로 증가합니다.
프로그램이 10분만 있으면 가상메모리 부족으로 시스템이 죽습니다.
추측으로는 원인이 COM 호출 중에 새로운 인터페이스를 생성하면서 발생하는 문제같습니만,
저런 경우에 해결할 수 있는 방업이 없을까요?