Как удалить DLL???

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Как удалить DLL???

Сообщение sl-shem » 23.05.2006 (Вт) 13:48

Прицепляю DLL к программке следующей функцикей:

Public Function Reg(ByVal strReg As String, ByVal lngLoad As Long) As Long
Reg = LoadLibraryA(strReg)
lngLoad = CreateThread(ByVal 0, 0, ByVal GetProcAddress(Reg, IIf(lngLoad, "DllRegisterServer", "DllUnregisterServer")), ByVal 0, 0, 0)
WaitForSingleObject lngLoad, 10000
CloseHandle lngLoad
FreeLibrary Reg
End Function

dll прицепляется нормально. Но мне иногда необходимо во время выполнения программы удалить ее и тут вылетает ошибка.

Как можно открепить dll во время выполнения???

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 14:12

А в чем смысл вышеприведенного кода? Это во-первых, во-вторых, какую DLL ты таким образом цепляешь и, в-третьих, какую DLL и, главное, зачем ты пытаешься удалить?
Весь мир матрица, а мы в нем потоки байтов!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 14:29

Activex DLL.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 14:37

мдя©.... а регистрировать ссылки на ActiveX библиотеку не пробовал?

Я уж не спрашиваю зачем от нее "отцепляться"...
Весь мир матрица, а мы в нем потоки байтов!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 14:41

1. DLL вытаскиватся из БД.
2. Их очень много и постоянно добавляються новые!
3. Конечно можно и не удалять (но очень хочеться для удобства)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 14:45

Ничего не буду советовать - DLL хранящиеся в БД это просто LOL... :lol:
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 14:46

кстати удобно и все работет нормально!!!!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 14:51

Ладно, а какая ошибка?
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 14:53

Возникает ошибка занятости файла.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 14:55

И зачем DLL в базе данных? Какой в этом великий смысл?
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 14:56

Может поток еще не завершился к тому времени, когда ты пытаешься DLL выгрузить. Ведь многопоточность в VB не так проста, как кажется...
Хотя наврядли, там у тебя стоит WaitForSingleObject.
Последний раз редактировалось Twister 23.05.2006 (Вт) 15:03, всего редактировалось 1 раз.
А я все практикую лечение травами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 14:57

sl-shem писал(а):Возникает ошибка занятости файла.


Как это не традиционно звучит, но код в студию!
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 14:58

И зачем DLL в базе данных? Какой в этом великий смысл?
Не, ну впринципе иногда может стоит зранить DLL в централизованной базе чтоб легче было обновлять, но, ИМХО, это изврат...
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 14:58

блин ну сидит человек 500 работат. Надо немного подправит функцию в dll. И что бы у всех заработало надо всем обьяснить где взять обновление как установить и тд. А так лежит в базе и когда надо обратиться к dll она просто от туда берется!!!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 14:59

sl-shem
Существуют другие способы синхронного обновления модулей...
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:01

не я этот способ придумывал он уже рабоат так давно!!!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 15:10

Так все-таки выложи код, с указанием места в котором вылезаем ошибка
Весь мир матрица, а мы в нем потоки байтов!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:12

нет!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 15:15

Так все-таки выложи код, с указанием места в котором вылезаем ошибка
Думаю ошибка вылетает там, где он пытается удалить файл. Но тот код не поможет, так как просто не выгружена библиотека. Попробуй для хранения значения, возвращаемого LoadLibrary завести отдельную переменную. Может в этом весь прикол. Ну а вообще конечно так гадать на кофейной гуще - много не нагадаешь. Но причину могу сказать на 90% - не везде сработала FreeLibrary...
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:17

Пробывал заводить отдельную переменную не помагат!!!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 15:17

нет!
А это что, коммерческая тайна? :lol:
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:20

Нет код конечно можно выложить тока там много лишнего будет. А ошибка вылетат при KILL "путь до файла\имя фала"

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 15:25

sl-shem писал(а):Пробывал заводить отдельную переменную не помагат!!!
Twister писал(а):не везде сработала FreeLibrary
Это судя по приведенному коду. Проверь и убедись, что FreeLibrary везде сработала. Я имею ввиду точно посчитай кол-во вызовов LoadLibrary и сравни с кол-вом удачных FreeLibrary. Тем более там у тебя потоки, о проблемах с которыми можешь почитать здесь. Попробуй модифицировать код. Да и вообще, зачем использовать потоки?
А я все практикую лечение травами...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 23.05.2006 (Вт) 15:25

sl-shem
Пиши для своей проги запускалку, которая после завершения оной почиститпапку с DLL. Тогда не возникнит ошибки, ибо DLL никто уже точно не использует.
Последний раз редактировалось keks-n 23.05.2006 (Вт) 15:43, всего редактировалось 1 раз.
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 15:27

а FreeLibrary нормально срабатывает?
Весь мир матрица, а мы в нем потоки байтов!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 15:29

ActiveX делает LoadLibrary ещё раз.
Но VB второй раз и выгружать ее должен тоже, по идее.
Пиши для своей проги запускалку, которая после завершения оной почиститпапку с DLL
Ага, лучше сразу инжект соответствующего асмовского кода в эксплорер, чтоб наверняка сработало... Нет! Это не решение.
Последний раз редактировалось Twister 23.05.2006 (Вт) 15:36, всего редактировалось 1 раз.
А я все практикую лечение травами...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.05.2006 (Вт) 15:35

Наверно стоит воспользоваться советом keks-n. Делать дополнительную прогу, которая вытаскивает все нужные dll из БД, регистрирует их, загружает прогу, дожидается ее завершения, отменяет регистрацию и прибивает dll.
Весь мир матрица, а мы в нем потоки байтов!

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:38

Ладно, спасибо всем!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.05.2006 (Вт) 15:38

загружает прогу, дожидается ее завершения, отменяет регистрацию и прибивает dll
А если перезагрузка? DLL-ли (мусор) останутся.
А я все практикую лечение травами...

sl-shem
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 17.03.2006 (Пт) 11:41

Сообщение sl-shem » 23.05.2006 (Вт) 15:42

Да все равно остаеться!!!

След.

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

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

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

    TopList  
cron