Почему не работает код?

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

Почему не работает код?

Сообщение VBTerminator » 20.08.2009 (Чт) 8:50

В одной из моих программ потребовалось использование подключаемых модулей (адд-онов). Соответственно, я написал DLL-ку, которая предоставляла бы нужные свойства и методы всех аддонов в определённой папке (каждый адд-он представляется как элемент коллекции).

Но библитека не захотела корректно работать - при запуске главное приложение зависало вместе с ней. Как выяснилось после отладки - причиной зависания была функция CreateObject (находщаяся в класе Plugin), которая при каждом вызове генерировала ошибку, даже после того, как в обработчике ошибок обрабатываемый адд-он регистрировался, т. е. был цикличный вызов обработчика ошибок, затем регистрация адд-она, затем Resume...

Где в коде допущена ошибка?
Вложения
AddonCore+Addon.zip
DLL, организующая доступ к адд-онам (Addon Core\) + аддон (Modules\).
(24.18 Кб) Скачиваний: 32
Последний раз редактировалось VBTerminator 20.08.2009 (Чт) 14:55, всего редактировалось 1 раз.

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

Re: Почему не работает код?

Сообщение Vi » 20.08.2009 (Чт) 10:48

Код: Выделить всё
        'Получаем адд-он
        Set PluginObject = CreateObject(App.Path & "\modules\" & ModuleName & ".PluginModule")

CreateObject просит ProgID, для VB реализующийся как <имя библиотеки>.<имя класса>. В крайнем случае - ModuleName & ".PluginModule".

Да, и забыл. Перебор файлов нужно также нужно изменить, иначе это бесконечный цикл.
Код: Выделить всё
                strCurrentFile = Dir(App.Path & "\modules\*.dll")
                'Пока мы получаем список файлов
                Do While strCurrentFile <> vbNullString
                        Set objNewMember = New Plugin                      'Создаём класс
                        objNewMember.InitPlugin strCurrentFile
                Loop

Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Почему не работает код?

Сообщение VBTerminator » 20.08.2009 (Чт) 14:52

Vi писал(а):Да, и забыл. Перебор файлов нужно также нужно изменить, иначе это бесконечный цикл.

Ах, да, забыл перед Loop поставить strCurrentFile = Dir()

Архив обновлён.

Vi писал(а):В крайнем случае - ModuleName & ".PluginModule"

ModuleName - это имя библиотеки в файловой системе?


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

    TopList