Я пытаюсь получить библиотеку xlslib (http://sourceforge.net/projects/xlslib/) для работы в моей программе Windows MFC (VC 2010). Сгенерированный файл Excel может быть несколько большим, и мне нужно иметь возможность писать несколько файлов Excel, не закрывая диалоговое окно, что вызвало некоторые проблемы.
Корневой класс называется «рабочая книга». Я изначально заявил:
workbook xls;
в функции, которая обрабатывает экспорт в Excel, но взорвала стек. xls стал слишком большим.
Следующая попытка Я объявил m_xls в определении класса для моего диалога, но я не могу понять, как очистить m_xls между вызовами, и если вы запускаете экспорт Excel более одного раза, когда диалоговое окно открыто, данные из первого запуска заканчиваются во втором третий прогон получает данные от 1-го и 2-го и т. д.
Я попытался очистить данные с первого запуска в конце функции экспорта. Я посмотрел на то, что было сделано в деконструкторе для класса, чтобы удалить данные из основного вектора хранения данных. Класс рабочей книги очень сложен со многими подклассами, и, независимо от того, когда я пытаюсь, программа становится очень нестабильной после первого запуска кода Excel (после очистки данных), и я получаю утверждение в функции пула потоков, когда я завершаю работу. программа и ряд исключений первого шанса в окне вывода.
Наконец, я объявил указатель на книгу в классе, а затем динамически выделил книгу:
m_pxls = new workbook;
в начале функции. В конце я освобождаюсь от удаления:
delete m_pxls;
Это взрывает программу со следующим сообщением об ошибке:
HEAP[Program.exe]: Heap block at 06329360 modified at 0632950A past requested size of 1a2
Windows has triggered a breakpoint in Program.exe.
This may be due to a corruption of the heap, which indicates a bug in Program.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while Program.exe has focus.
The output window may have more diagnostic information.
Похоже, что все, что было выделено, было базовым классом без данных, и все данные, добавленные функциями в xlslib, вышли далеко за пределы выделенной памяти. Может быть, я что-то неправильно понимаю, но разве деконструкторы для книги и всех ее подклассов не вызываются при освобождении памяти?
Мне нужно выяснить, как сделать одну из двух вещей здесь:
1) Выясните, как повторно инициализировать статически объявленный m_xls в определении класса при дальнейших вызовах кода Excel. ИЛИ ЖЕ
2) Выясните, что происходит с выделением и освобождением, и заставьте new / delete работать правильно.
Я программировал в течение некоторого времени, но это входит в нюанс управления памятью, с которым я никогда не сталкивался раньше. Я знаю, что, вероятно, упускаю что-то очевидное в новой / удалить, я должен знать
заранее спасибо
Задача ещё не решена.