Проблема с ООП

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

Проблема с ООП

Сообщение Jack Ferre » 23.07.2014 (Ср) 19:22

Error -2147417848 (&H80010108): The object invoked has disconnected from its clients.
Возникает после подвисания программы (например инициализация чего-нибудь или обращение к сетевому ресурсу).
Причина - позднее связывание.
1-я проблема отладки - возникает очень редко.
2-я (огромная для меня) проблема отладки - возникает только в скомпилированном приложении.

Суть:
Имеется переменная MyObj as Object.
Класс CSmall имеет MethotA.
Класс CBig имеет MethodA, MethodB.
Переменная MyObj инициализируется так: Set MyObj = New CSmall или Set MyObj = New CBig.
Ну и выходит, что при вызове MyObj.MethotA / MyObj.MethotB рейзится эта ошибка.

Как решить проблему?

Из идей только сделать общий интерфейс IОшибкауходи с методом MethotA и объявлять MyObj as IОшибкауходи.
В классы CSmall и CBig сделать Implements IОшибкауходи, и MethotA заменить на IОшибкауходи_MethotA.
Но как же бедняжко MethodB :cry:

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Проблема с ООП

Сообщение Jack Ferre » 23.07.2014 (Ср) 19:37

Придумал. MethodB тоже добавить в интерфейс.

Просто идея в том, чтобы были общие и различные методы. Придется делать так:
Общий интерфейс: .. MethodA, MethodB, MethodC, MethodD, MethodE, MethodF
Класс CFirst: ......... MethodA, MethodB, MethodC, MethodD, MethodE, MethodF
Класс CSecond: ...... MethodA, MethodB, MethodC, MethodD, MethodE, MethodF

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.07.2014 (Ср) 23:47

Это как-то связано с COM-объектами?
Менее абстрактный пример кода можно?


UPDATE: Ошибся разделом, это ж VB6.

Если я правильно понимаю идею ошибки, то баг где-то в другом месте и объект уничтожается раньше, чем закончились ссылки. Возможно, что-то из области конвертирования его адреса в Long. И интерфейсы вряд ли помогут.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Проблема с ООП

Сообщение Vi » 24.07.2014 (Чт) 9:31

Jack Ferre писал(а):Error -2147417848 (&H80010108): The object invoked has disconnected from its clients.
Возникает после подвисания программы (например инициализация чего-нибудь или обращение к сетевому ресурсу).
Причина - позднее связывание.
Эта ошибка никак не связана с ранним или поздним связыванием. Её генерит прокси объекта для всех интерфейсов, и она в VB недостижима при обычном использовании, потому что апартмент один и тот же и прокси просто не создаётся. Выходит, что-то ты делаешь на свой страх и риск.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


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

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

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

    TopList