powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / обработка ошибок OLE
11 сообщений из 11, страница 1 из 1
обработка ошибок OLE
    #32305980
подключаюсь к MS Word через OLEObject:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
oleobject wordapp

wordapp = create oleobject
wordapp.ConnectToNewObject('word.application')

... какие-то действия с wordapp, которые вызывают ошибку.

destroy wordapp


Как мне отловить ошибку и хотя бы выполнить destroy wordapp?
У OLEObject есть события Error и ExternalError, a как их подключить в рантайме?

PB 5.0.01
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32308968
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ужели даже Филипп ничего не может (или не хочет) сказать по данному поводу? Мне скоро предстоит мучится с OLE, хотелось бы узнать некоторые вещи заранее. Please, Master ...
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32309413
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Илья Зайцев
Наследник от oleobject. Перехвать событий и/или функций.
Вывод результата выполнения наружу.
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32309676
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человек про РВ5 спрашивает. О чём тут говорить?
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32309739
Ok, возьмем PB 9.0
генерю по шаблону пустое SDI - приложение, на окно About шлепаю кнопку, в обработчике клика пишу
Код: plaintext
1.
2.
3.
4.
5.
6.
oleobject wordapp
wordapp = create oleobject
wordapp.ConnectToNewObject('word.application')
wordapp.Visible = true 
wordapp.DoSomething() // этой функции в Word'е нет, выскакивает ошибка "Error calling external function dosomething blablabla"
messagebox('', 'I am here.') // сюда никогда не заходит
destroy wordapp


Дальше компилирую в exe (PBD), запускаю exe.
Давлю кнопку, запускается Word, выдается сообщение об ошибке и - вуаля - приложение молча закрывается .
Собственно, мне бы хотелось чтобы оно не закрывалось :)
С PB 5.0 aналогично, только приложение закрывается, даже будучи запущенным из IDE.

Win2000 eng 5.00.2195 SP3

2 Raven A
Ага, сделал наследника, вызов передал, только все равно приложение дохнет, хотя destroy выполняется.
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32309753
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в самом простом случае, проверил и с ехешником - все работает корректно. PB 9.0 6096
И нечего сразу на Филиппа наезжать... хамить не надо - тут никто никому не обязан.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
oleobject wordapp
wordapp = create oleobject
wordapp.ConnectToNewObject('word.application')
wordapp.Visible = true
try
	wordapp.DoSomething() 
catch (runtimeerror er)	
	MessageBox( "Error" ,  "Do it!" )
end try
messagebox('', 'I am here.') //  241 ; 254 ; 228 ; 224 ;  237 ; 232 ; 234 ; 238 ; 227 ; 228 ; 224 ;  237 ; 229 ;  231 ; 224 ; 245 ; 238 ; 228 ; 232 ; 242 ;
destroy wordapp


Да, если лениво на каждый оператор свой эксепшн ставить, посмотрите эксепшены событий.
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32310018
Спасибо, я не знал, что в свежих версиях PB есть exceptions. В 5.0 их не было, а мне на нем еще некоторое время работать :(.

PS. Если кого обидел, прошу прощения, намерения такого не имел.
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32310484
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Илья Зайцев
Ну если с PB5 еще жить, то повторюсь:
- создать наследника от oleobject ( myole)
- в код на myole.event error добавить логику обработки ошибки, например выставление твоего признака/кода ошибки на instant variable (как вариант)
После обработки ошибки установить требуемое значение параметра события action (см.Help), например ExceptionIgnore!
- в вызывающем коде проверять после вызова функции состояние myole
(не забыть сбросить состояние ошибки)
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #32310666
После вставки action = ExceptionIgnore! все стало хорошо.
Спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
обработка ошибок OLE
    #34259287
Raven A>Илья Зайцев
Наследник от oleobject. Перехвать событий и/или функций.
Вывод результата выполнения наружу.

наследовать не получится...
Вернее, получится, но при первой же попытке присвоить экземпляру нового класса какой-то оleobject билдер просто отвалится по ошибке. Проходил уже. вот например:

n_cst_ole a // здесь, n_cst_ole - класс, пронаследованный от oleobject

a = istr_apps .server.Application.Documents.Item(j)

Еслит отбросить мишуру, то понятно, что я пытаюсь присвоить экземпляру класса вордовую страницу.
Так вот, если с oleobject это работает, то с наследниками уже нет, ругается, что не может привести переменные к одному типу.
...
Рейтинг: 0 / 0
обработка ошибок OLE
    #34259764
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может поможет

int rc

if trim(nvl(version,'')) = '' then version=ProgID
rc=ole_object.ConnectToObject('', version)
ole_error=''
CHOOSE CASE rc
CASE 0
return true
CASE -1
ole_error='Invalid call: the argument is the Object property of a control'
CASE -2
ole_error='Class name "'+version+'" not found'
CASE -3
ole_error='Object could not be created'
CASE -4
ole_error='Could not connect to object'
CASE -5
ole_error="Can't connect to the currently active object"
CASE -6
ole_error='Filename is not valid'
CASE -7
ole_error="File not found or file couldn't be opened"
CASE -8
ole_error='Load from file not supported by server'
CASE ELSE
ole_error='Other error'
END CHOOSE
return false
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / обработка ошибок OLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]