Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » Visual Basic по шагам Шаг 48 - Обработка ошибок COM DLL клиентом В прошлом шаге мы с Вами посмотрели как вообще обрабатываются ошибки в VB. Давайте попробуем применить наши знания к COM DLL. Мы возьмем тот же компонент, что и из шага "Шаг 39 - Понимание использования MTS". И изменим главный метод. Public Function Method() As Boolean Dim context As ObjectContext Dim sql As ClassSQL Dim oracle As ClassORACLE Set context = GetObjectContext Set sql = context.CreateInstance("ProjectTransaction.ClassSQL") Set oracle = context.CreateInstance("ProjectTransaction.ClassORACLE") sql.Method oracle.Method Set sql = Nothing Set oracle = Nothing context.SetAbort Err.Raise 11111, "Com DLL", "Hello Client" Method = True End Function Нужно заново собрать DLL и обновить в Transaction server. У клиента сделаем перехват ошибок: Private Sub Command1_Click() On Error GoTo Errors: Dim a As ClassGeteral Dim b As Boolean Set a = New ClassGeteral b = a.Method Set a = Nothing If b = True Then MsgBox "Ok" Else: MsgBox "Error" End If Exit Sub Errors: MsgBox "Error detected" MsgBox (Str(Err.Number)) MsgBox (Err.Source) MsgBox (Err.Description) End Sub Запустим и посмотрим. Клиент перехватил ошибку и обработал, что и требовалось. Итак, если произошла ошибка нужно вернуть SetAbort. Только будьте внимательны, если ошибка внутри какого-то компонента, то код этой ошибки нужно передать по цепочке объектов, а клиент должен знать все коды, чтобы что-то сказать пользователю. Вызов SetAbort гарантирует, что дальнейшее обращение к объектам прекратится и ошибка будет отлавливаться. Внимательным нужно быть в плане того, что стандартный код подразумевает, что ошибки отлавливаются в каждом компоненте, и, если она внутри вызова, то может затеряться. Вы узнаете, что транзакция отменена, но почему не узнаете. Вариантов реализации много, может клиенту и не надо знать почему и что произошло, а только сам факт. Есть такая возможность и как сказано в уставе - умело орудуя штыком и прикладом...
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рейтинги
|