Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: ....Перехват ошибок.... Добавлено: 16.06.04 23:26  

Автор вопроса:  PeterS

Привет всем!

Подскажите, пожалуйста, как перехватить ошибку при вызове объявленной функции в DLL файле, которого на компьютере не существует, т.е. например, в моей программе объявлена функция которая есть в файле *.dll, я копирую эту программу на другой компьютер, где нет этой dll и возникает ошибка "Run-time error 53: File not foud". В коде программы перед вызовом функции я ставлю On Error Goto * и пишу своё сообщение об ошибке, это срабатывает, а в
exe-файле вначале появляется то сообщение, а потом моё.

Заранее благодарю.

Ответить

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

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 17.06.04 16:58
кста, при декларировании и запуске приложения ошибки то как раз и не возникает, ошибка возникает если эту функцию вызвать...

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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аботу."
Если и это не убеждает в невозможности перехватить такую ошибку, то остается только развести руками...

Ответить

Страница: 1 |

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



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