закрыть DLL-форму

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

закрыть DLL-форму

Сообщение bevaine2000 » 02.06.2005 (Чт) 11:15

имеется приложение которое запускает dll c ее формой. Закрываю эту dll-форму методом Unload.FormDLL или DestroyWindow FormDLL.hwnd, пытаюсь заново открыть по тому же пути, не открывается, ставлю задержку перед CreateObject все нормально в чем дело? Завершение процесса методом TerminateProcess ничего не дает.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: закрыть DLL-форму

Сообщение codemaster » 02.06.2005 (Чт) 11:39

bevaine2000 писал(а):имеется приложение которое запускает dll c ее формой. Закрываю эту dll-форму методом Unload.FormDLL или DestroyWindow FormDLL.hwnd, пытаюсь заново открыть по тому же пути, не открывается, ставлю задержку перед CreateObject все нормально в чем дело? Завершение процесса методом TerminateProcess ничего не дает.



чтото "держит" твою форму

событие Terminate формы генерится ?
//<-
Mit freundlichen Grüßen
//->

bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Сообщение bevaine2000 » 02.06.2005 (Чт) 11:49

в событии я не чего не писал, что там должно быть? Вообще в идеале я придставляю, что нужно нужно сначала выгрузить форму, завиршить процесс(выгрузить dll), обнулить объект, а уж потом заново его создавать, но что-то не выходит. Может нужно как-то по другому завершать процесс? Функция ExitThread, вообще заверщает все процессы в том числе и родительский. :?

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 02.06.2005 (Чт) 12:12

bevaine2000 писал(а):в событии я не чего не писал, что там должно быть? Вообще в идеале я придставляю, что нужно нужно сначала выгрузить форму, завиршить процесс(выгрузить dll), обнулить объект, а уж потом заново его создавать, но что-то не выходит. Может нужно как-то по другому завершать процесс? Функция ExitThread, вообще заверщает все процессы в том числе и родительский. :?


Я не видел кода твой формы
Возможно на ней есть неостановленные таймеры
а внутри ссылки на "долгоиграющие" объекты :wink:

при таком раскладе ты получиш всегда отлуп на выгрузку формы.
//<-
Mit freundlichen Grüßen
//->

bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Сообщение bevaine2000 » 02.06.2005 (Чт) 13:28

вот пример, только надо сначало dll зарегистрируй - start.bat
Вложения
NoClose.zip
(7.67 Кб) Скачиваний: 22

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 03.06.2005 (Пт) 11:31

Смотри сам


DLL

Код: Выделить всё
Public Property Get pForm() As Long
pForm = Form1.hWnd
End Property


т.е. возвращаем Long

пользуем в форме

Unload Object.pForm




думаю понятно ?

Еще есть пара замечаний по дизайну
//<-
Mit freundlichen Grüßen
//->

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.06.2005 (Пт) 12:45

codemaster писал(а):
Код: Выделить всё
Public Property Get pForm() As Long
pForm = Form1.hWnd
End Property


т.е. возвращаем Long

пользуем в форме

Unload Object.pForm

думаю понятно ?

Конечно понятно - Compile error: Type mismatch
Нельзя число выгружать.
Изображение

bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Сообщение bevaine2000 » 03.06.2005 (Пт) 13:16

Я зделал по другому:
Выгрузил форму, а потом: LoadLibrary,FreeLibrary, форму выгружал не посредственно из DLL, и все получилось 8)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 114

    TopList