Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: В VB глюк, если я не ошибаюсь... Добавлено: 03.04.05 22:11  

Автор вопроса:  DaSharm | Web-сайт: dasharm.com | ICQ: 780477 
нашел в ВБ 6.0 странный глюк в работе с Активикс контролами... Дело такое:

все мы знаем, что активиксы это по своей сути классы, в которых есть две самые главные функции создание и уничтожение (initialize & terminate). Вот если создать проэкт на ВБ, бросить на него Активикс контрол, тогда Вб вызвет initialize контрола...
Шаг1:initialize
 (создаем класс в Design Time)
Это понятно....Запускаем прогу:
Шаг2:terminate
 (удалили класс, созданный в Design Time)
Шаг3:initialize
 (создаем класс в Run Time)
Далее закрываем прогу:
Шаг4:terminate
 (удалили класс, созданный в Run Time)
Шаг5:initialize
 (снова создаем класс в Design Time)
Хм.. работает хорошо, никаких нареканий...Но давайте небольшой эксперимент:
 Откомпилим прогу!
Только мы заканчиваем компилить прогу, так сразу ВБ вызывает initialize...Да, именно, посмотрите что ВБ посмотрите что было в предыдущем шаге...К великому сожалению, тоже initialize.
Шаг6:initialize
 Т. е. ВБ создает новый экземпляр без удаления старого...но это ровно пол беды. Давайте запустим прогу:
Шаг7:terminate
Шаг8:terminate ( в моей конфигурации так рухнет все...)
Вот за такое нужно бить по ушам, у меня проэкт на VC рухнет из-за этих чудес в исполнении ВБ. 2 раза подряд удалять экземпляр класса, это вообще беспредел...

Вопрос: что скажут гуру, кто неправ, я или ВБ?

Ответить

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

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 04.04.05 10:31
На чем основаны твои высказывание о таком поведении ActiveX? Можно тестовый пример?

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #2
Добавлено: 04.04.05 16:51

Ок, на С++ сегодня дам тест. У меня баг вот в чем: в конструкторе класса активикса я создаю эщё один, экземпляр вообще левого класса, как член первого. А в деструкторе удаляю его... Вот если 2 раза подряд вызвать деструктор классса (что ВБ и делает) то мой левый класс будет 2 раза удален. но вот и не будет, будет 1 раз удален а при попытке второго прога уйдет в кому...

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 04.04.05 20:40
Есть предположение, что событие, названное тобой Terminate представляет собой метод Release, который может вызываться столько раз, сколько был вызван AddRef, и если тебе на весь COM-объект нужен только один объект твоего класса, то надо удалять его только если число ссылок равно 0... Хотя если не нужно вызывать деструктор твоего объекта, я бы предпочел, чтобы память очищалась автоматически, вместе с удалением COM-объекта

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #4
Добавлено: 04.04.05 22:50
хи...если не удалить, то при попытке создания нового экземпляра прога в коме...

Ответить

Страница: 1 |

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



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