Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие сервера Excel, OLE Container 
V
    Опции темы
Oberon83
Дата 11.12.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



Проблема в том, что сервер Excel остается в памяти после завершения работы программы. Это смотрел, не помогает. То "Неизвестное имя", то просто "Ошибка". Использую Excel 2003.

C Excel работаю через OLEContainer, создаю OleObject следующим обазом:
Код

Form1->OleContainer1->CreateObjectFromFile(path,false);

//Выбираю лист
Form1->sheets = Form1->OleContainer1->OleObject.OlePropertyGet("Worksheets");
Form1->sheet = Form1->sheets.OlePropertyGet("Item",1);

//Ну и т.д.
//...


Никак не получается правильно закрыть сервер Excel, после того как мое приложение завершит свою работу. Вот так изгаляться то же не очень охото.
Помогите кто чем может.
Заранее благодарен.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
Oberon83
Дата 15.12.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



Наконец-то я решил свою проблему, спасибо за ответы smile

Сам контейнер я создаю как было описано выше так:
Код

Form1->OleContainer1->CreateObjectFromFile(path,false);    
//Выбираю лист    
Form1->sheets = Form1->OleContainer1->OleObject.OlePropertyGet("Worksheets");    
Form1->sheet = Form1->sheets.OlePropertyGet("Item",1);    
//Ну и т.д.    
//...


Логично было бы предположить, что вызвав метод 
Код
 OleContainer1->DestroyObject(); 
, приложение должно было бы закрыть сервер Excel с которым работало. Поэтому, создав тестовый проект я в этом убедился - сервер выгружался.

Далее провел эксперимент с переменными типа Variant, поскольку я их использую. В ходе эксперимента выяснилось, что если не "занулять" их, то при вызове 
Код
 OleContainer1->DestroyObject(); 
 сервер Excel оставался висеть, поэтому для его выгрузки необходимо было присвоить всем Variant переменным значение NULL.

Далее выходе из своего приложения я присвоил всем переменным Variant значения NULL. НО никакого эффекта это не возымело, сервер как висел в памяти, так и оставался висеть.

Код
 /* Голова начинала потихоньку пухнуть... :) */


Для работы с Excel формой я создал класс, который выполнял все нужные мне операции. В нем были объявлены 3 переменные типа Variant, которые передавались в класс из основного приложения. По своему накопленному опыту я в деструкторе класса поставил присвоение этим переменным NULL. Опять не помогло.

Код
 /* Голова уже болела, настроение было никакое, начинал беситься и избивать клавиатуру... :) */


Далее нашел все переменные Variant в своем классе, которые использовались в функциях класса. Из своего первого учебника по программированию я знаю, что при выходе из функции все ресурсы, занятые ей, автоматически освобождаются, это относится и к локальным переменным функции. Так вот этого как раз почему-то не происходило, поскольку поставив присвоение всем локальным переменным функций NULL, приложение у меня нормально запустилось.

11.12.2006 - 15.12.2006

P.S.: Извиняйте за длинный рассказ - наболело, а так же за небольшой оффтоп.
P.S.S.: Может кому-нибудь пригодится.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0802 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.