在C ++自动化中退出excel会导致错误“Microsoft Excel已停止工作”

我有一个C ++应用程序使用自动化从Excel文件中读取。 Excel包装类是使用Office14创build的。 但是在我的系统上,我只有Office15 。 我在后台打开Excel,并从Excel中读取数据,并在我的UI中显示数据。 一切都很好,直到我在App上退出时出现错误“Microsoft Excel已停止工作”。

令人惊讶的是,我没有得到这个错误,如果我禁用我的系统上的EXCEL VS 9.0TFS Add-In

我无法理解为什么加载项会干扰代码中的应用程序。 只要我禁用此Add-in一切正常, EXCEL在后台closures没有错误。 我有以下代码来退出EXCEL应用程序。

 CExcelApplication excelApp; CExcelWorkbooks pBooks; CExcelWorkbook workbook; CExcelWorksheets pSheets; CExcelWorksheet pSheet; CExcelRange oRange; if ( FAILED( excelApp.CreateDispatch( _T("Excel.Application") ) ) ) { return; } COleVariant varOption( (long) DISP_E_PARAMNOTFOUND, VT_ERROR ); pBooks = excelApp.get_Workbooks(); workbook = pBooks.Open( m_strFileName, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption); pSheets = workbook.get_Worksheets(); pSheet = pSheets.get_Item(COleVariant((short)1)); oRange = pSheet.get_UsedRange(); COleSafeArray saRet(oRange.get_Value(varOption)); long iRows; long iCols; saRet.GetUBound(1, &iRows); saRet.GetUBound(2, &iCols); // Loop through the data and report the contents. for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) { for (int colCounter = 1; colCounter <= iCols; colCounter++) { ... } } ////// Don't save any inadvertant changes to the .xls file. oRange.ReleaseDispatch(); pSheet.ReleaseDispatch(); pSheets.ReleaseDispatch(); pSheet = NULL; pSheets = NULL; workbook.Close(COleVariant((short)FALSE), varOption, varOption); workbook.ReleaseDispatch(); workbook = NULL; pBooks.Close(); pBooks.ReleaseDispatch(); pBooks = NULL; excelApp.Quit(); excelApp.ReleaseDispatch(); excelApp = NULL;