Страница: 1 |
Страница: 1 |
Вопрос: БАГ VB6 и Excel - не выгружается
Добавлено: 19.10.06 17:45
Автор вопроса: Vas
Dim exlApp As New Excel.Application
exlApp.Workbooks.Add
и т.д. После закрытия Excel он НЕ ВЫГРУЖАЕТСЯ из памяти, что видно в списке процессов Диспетчера задач (Win XP Pr.). Надо закрывать своё приложение, тогда выгружается. Если не закрывая вызвать опять эту процедуру - ошибка, и надо Excel выгружать в процессах Диспетчера задач. ТЕПЕРЬ ГЛАВНАЯ ФИШКА: Дело в том, что у меня там делается шапка таблицы с форматированием, а потом .CopyFromRecordset (около 4000 записей и 24 поля)
Кода страницы на две. Но если код урезать засчет форматирования шапки таблицы, то все НОРМАЛЬНО. Я вообще-то с этим бьюсь уже 3 года. Не первый раз. И всегда так - как только текст кода по Excel-ю превышает какое-то значение - Excel перестает выгружаться. Кто знает в чем дело? Я могу выгрузить API, но хочу разобраться.
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 19.10.06 17:49
exlApp.Quit делать не пробовал?
Номер ответа: 2
Автор ответа:
Vas
Вопросов: 7
Ответов: 4
Профиль | | #2
Добавлено: 19.10.06 18:20
Это и есть метод закрытия excel. Что из кода, что юзером - по барабану. Set exlApp=Nothing тоже не помагает. Либо выкидываю львиную долю кода, либо хватаю hwnd и выгружаю API-шкой
Номер ответа: 3
Автор ответа:
iLLyuzor
ICQ: 223685087
Вопросов: 9
Ответов: 77
Профиль | | #3
Добавлено: 20.10.06 12:13
Вообще то тема уже много раз поднималась... По другому не получиться, кроме как прибивать процесс через API. VB6 не содержит методов для управления счётчиком ссылок COM объекта, таких как AddRef и Release. Та же проблема наблюдается при написании внешних компонент для 1С на VB6. Вот если бы кто-то из наших API-гуру написал на C функцию, которая бы принимала ссылку на COM объект и управляла счётчиком ссылок, тогда возможно проблема бы отпала, по крайней мере я о таком решении слышал.
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 24.10.06 18:35
Бред. .Quit выгружает ексель навылет, и никогда подобных багов в нормальной программе не было.
ЗЫ Для управления счетчикм ссылок не обязательно писать функцию на C - достаточно заюзать tlbшку с объявленным IUnknown и вызывать Release. Но к данной проблеме отношения это не имеет.
Номер ответа: 5
Автор ответа:
iLLyuzor
ICQ: 223685087
Вопросов: 9
Ответов: 77
Профиль | | #5
Добавлено: 25.10.06 12:11
LamerOnLine, можно поподробнее про tlbшку с объявленным IUnknown и вызовом Release.