Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Глюк с выгрузкой dll Добавлено: 21.06.07 14:11  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
Че-то у меня вроде перекосило. Любая, даже пустая созднанная ATL визардом VC6 библиотека не выгружается из памяти при установке созданного класса в Nothing.
Пустой класс, созданный в VB, по прежнему убивается нормально.
В чем может быть суть?

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 21.06.07 14:37
Ты это проверяешь в IDE? Посмотри как будет в откомпиленном виде.

Я что-то похожее у себя приметил. Вызываю из макроса, из редактора VBA собственную DLL, она потом не овобождается до тех пор, пока не закроешь полностью VBE и все окна EXCEL. Может тебе её LoadLibrary грузить? И выгружать тоже ручками, не Nothing

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 27.06.07 11:22
Повторяю вопрос. Создаю через ATL визарда ActiveX dll. В ней класс. Из VB создаю экземпляр класса. Затем ставлю его в Nothing. DllCanUnloadNow возвращает S_OK. Библиотека остается висеть в памяти.
Для теста создал библиотеку с пустым классом (не добавлял ничего, только креатифф визарда). Результат тот же.
Никаких LoadLibrary тут не лежало, все средствами COM.
В чем может быть проблема?

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 27.06.07 11:25
ЗЫ Аналогичный класс, созданный в VB, при выгрузке утаскивает за собой dll корректно. В моем случае деструктор и DllCanUnloadNow отрабатывают корректно, но библа все же остается прилинкованой.
ЗЫЫ Платформа создания dll - MS VC6++

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 27.06.07 11:44
Поправочка - DllCanUnloadNow отрабатывает ТОЛЬКО при закрытии проекта (формы) где переменная была объявлена. Установка в Nothing сего действа не вызывает. Путем использования CoFreeUnusedLibraries DllCanUnloadNow все же вызывается, возвращает S_OK, но выгрузка все равно не происходит. Что за...?

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 27.06.07 12:40
Мудота какая-то. Выгрузка корректно происходит только когда я в ВБ приложении вызываю CoUninitialize. При этом для корректного пересоздания объектов сразу же нужно вызывать CoInitialize.
При попытке вызова CoUninitialize из самой dll, понятное дело, получаю GPF.
Так кто-нить знает как с этой дурью бороться?

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 28.06.07 12:48
АУ?!

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 28.06.07 19:03
Это возможно из за самого вб компилятора.. попробуй это же на си написать

Ответить

Номер ответа: 8
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 29.06.07 10:29
Оно на си и написано. Из вб я создаю сам объект.
Аналогичный "пустой" класс на вб - выгружается длл нормально. А тут... Ждал и 10 минут, и 20, и делал кучу вызовов CoFreeUnusedLibraries - один хрен. DllCanUnloadNow возвращает S_OK, типа выгружай меня, но выгрузки нет. Уже задрало.

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 29.06.07 14:13
Ну я имею ввиду вызови свой класс (создай объект) на си а не на вб.. и попробуй на си его CoUninitialize..

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 26.07.07 13:05
В общем, засада. Глючок весьма неприятный.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам