Страница: 1 |
Привет всем! Подскажите, пожалуйста, как перехватить ошибку при вызове объявленной функции в DLL файле, которого на компьютере не существует, т.е. например, в моей программе объявлена функция которая есть в файле *.dll, я копирую эту программу на другой компьютер, где нет этой dll и возникает ошибка "Run-time error 53: File not foud". В коде программы перед вызовом функции я ставлю On Error Goto * и пишу своё сообщение об ошибке, это срабатывает, а в Заранее благодарю.
Страница: 1 |
Вопрос: ....Перехват ошибок....
Добавлено: 16.06.04 23:26
Автор вопроса: PeterS
exe-файле вначале появляется то сообщение, а потом моё.
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 17.06.04 00:42
Проверяй наличие файла
Проверяй наличие нужной функции
Вызывай не декларацией, а c получением GetProcAdress адреса функции. Есть примеры вызова АПИ по ее названию...
Номер ответа: 2
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #2
Добавлено: 17.06.04 13:47
Когда ты описываешь функцию в виде: Declare Function ИМЯФУНКЦИИ Lib "ИМЯ.DLL"...
ты используешь "неявную" загрузку DLL. Т.е. эта DLL загружается на этапе
инициализации приложения. В твоем случае надо использовать "явную" загрузку
библиотеки, для этого используй комбинацию API функций:
LoadLibrary-->GetProcAdress-->CallWindowProc-->FreeLibrary
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 17.06.04 16:58
кста, при декларировании и запуске приложения ошибки то как раз и не возникает, ошибка возникает если эту функцию вызвать...
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 22.06.04 01:01
Загрузчику-то наплевать, есть ли у тебя вызовы этих функций, он если может DLL'ку подгрузить, то подгружает, а если нет, то не подгружает. А уж будет твое приложение вызывать эту функцию - дело твое. Можно пошаманить с AddressOf Declare'рованных функций и IsBadCodePtr, попроверять, есть ли там загруженная DLL, может, поможет.
Номер ответа: 5
Автор ответа:
PeterS
Вопросов: 24
Ответов: 109
Профиль | | #5
Добавлено: 22.06.04 10:42
Нет это всё не то что Вы sne, alex, Sharp подсказали. Надо гораздо проще, просто перехватить, а не проверять!!!
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 22.06.04 11:27
Боюсь, что твой On Error не поможет. И гораздо проще именно проверить. Потому, что до строки On Error просто дело не будет доходить.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 22.06.04 12:19
PeterS, ну ка поведай мне, как мне перехватить таковую ошибку?
Если сможешь, будешь гуру в программировании на VB ))
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 22.06.04 12:38
Маленькое подтверждение того, что до On Error дело не дойдёт (из Icezelion'а, урок 17):
"Когда вы поpучаете Windows загpужать DLL, если та отсутствует, Windows выдаст сообщение "Тpебуемый .DLL-файл, xxxxx.dll отсутствует" и все! Ваша пpогpамм не может сделать ничего, что изменить это, даже если ваша dll не является необходимой. Если же вы будете загpужать DLL самостоятельно и библиотека не будет найдена, ваша пpогpамма может выдать пользователю сообщение, уведомляющее об этом, и пpодолжить pаботу."
Если и это не убеждает в невозможности перехватить такую ошибку, то остается только развести руками...