Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не высвобождается память в активх-приложении 
V
    Опции темы
Bogdan1024
  Дата 9.1.2007, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Короче, сделал я в ВБ6 АктивХ-приложение: есть форма, там есть кнопка "показать другую форму", на неё нажимаешь, и вызывается процедура, которая открывает другую форму:
Код

Private Sub Форма1_Click()
Dim c As New Class1
c.showform
End Sub

'Class1, определённый в модуле класса
Public Sub showForm()
    Форма2.Visible = True
End Sub

Private Sub Class1_Terminate()
    Unload Форма2
End Sub


Больше приложение ничего не делает. В книге написано что если не добавить процедуру Class1_Terminate, то приложение останется висеть в памяти потому что Форма2 будет неудалённой. Но моё приложение и так и так остаётся в памяти! Что делать тут? А вот если написать 
Код

Public Sub showForm()
    Форма2.Show vbModal
End Sub

То приложение не будет висеть в памяти не зависимо от того есть ли деструктор класса или нет. 
Чем вызвана такая разница?

Это сообщение отредактировал(а) Bogdan1024 - 9.1.2007, 01:37


--------------------
user posted image
PM MAIL   Вверх
Black_Star
Дата 9.1.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 9.9.2003
Где: Minsk

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



Set Form2=Nothing ?
PM ICQ   Вверх
Naghual
Дата 9.1.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Цитата(Bogdan1024 @  9.1.2007,  01:36 Найти цитируемый пост)
Чем вызвана такая разница?

Паралельностью процессов.

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

Во втором случае, когда форма вызывается на экран Модально, выполнение основного приложения прерывается до тех пор, пока форма не будет закрыта. Имеет место линейный жизненный цикл.

Опять же, это еще зависит от области описания переменной Форма2.


Решение: 
Class1_Terminate() добавить команду Явного уничтожения Форма2, как уже подсказал Black_Star.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Bogdan1024
  Дата 9.1.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Использовал Set Форма2 = Nothing. Не, всё равно всё так же само работает. В ататче проект.

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  try09.zip 6,13 Kb


--------------------
user posted image
PM MAIL   Вверх
Naghual
Дата 9.1.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Класс:
Код

Dim Form2 As Форма2


Public Sub ShowForm(Optional ParentForm As Object = Nothing)
   Form2.Show , ParentForm
End Sub

Private Sub Class1_Terminate()
    Unload Form2
    Set Form2 = Nothing
End Sub

Private Sub Class_Initialize()
    Set Form2 = New Форма2
End Sub



И при вызове:
Код

c.ShowForm Me



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Bogdan1024
Дата 10.1.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Спасибо, Naghual! Теперь работает, только пришлось вместо Форма2.Visible = False написать Hide, иначе форма не скрывается (почему-то) и приложение всё равно висит в памяти. Хм, может из-за этого оно и глючило всё время... ну и не важно, главное что теперь у меня есть хотя бы один работающий способ написать работающий активХ-объект с формами smile



--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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