Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2009, 21:32   #1
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию Что за EAccessViolation?

Написал прогу с com-объектом. Но во время выполнения одного из методов этого объекта (объект грамматически анализирует слово, злополучный метод загружает словари для определения слова) возникает исключение EAccessViolation.

Что это значит и как бороться?
Anekdot вне форума Ответить с цитированием
Старый 30.06.2009, 21:44   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это значит что программа обращается к чужой памяти(неверный указатель/несуществующий обьект и тд)
прошерстить код и использовать защищенные блоки
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.07.2009, 14:55   #3
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

Код метода написан не мной довольно сложен, проверить не смогу. А что такое защищенные блоки?
Anekdot вне форума Ответить с цитированием
Старый 01.07.2009, 15:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А что такое защищенные блоки?
Имеются ввиду участки памяти в которые процесс не может писать. Контролируются виндой.
В действительности нужно код смотреть
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 23:42   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

защищенные блоки
Код:
try
 <действия которые могут привести к ошибке> 
except 
 <действия при ошибке> 
end;
Код:
try 
 <действия которые могут привести к ошибке> 
finally
 <действия при ошибке, но они выполнятся в любом случае(есть ошибка или нет)>
о втором поясню...это полезно для работы с временными обьектами(навсякий уточну, что я имел в виду экземпляр класса)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2009, 12:58   #6
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

Не происходит инициалиазции этого объекта. Переменная HRESULT равна 1, а должан быть S_OK, если я все правильно понимаю. Что означает 1?
Anekdot вне форума Ответить с цитированием
Старый 06.07.2009, 13:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что означает 1?
Все что угодно. Нужно в справку по функции смотреть.
Вызови RaiseLastWin32Error чтоб посмотреть текст ошибки.
I'm learning to live...

Последний раз редактировалось Stilet; 06.07.2009 в 13:43.
Stilet вне форума Ответить с цитированием
Старый 07.07.2009, 09:22   #8
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

А что это такое RaiseLastWin32Error, функция? Как ее использовать?

Процедура вызвала сообщение: Project <project-name> raised exception class EOSError with message 'A call to an OS function failed'.

К чему бы это?

Последний раз редактировалось Stilet; 30.07.2009 в 16:14.
Anekdot вне форума Ответить с цитированием
Старый 30.07.2009, 16:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А что это такое RaiseLastWin32Error, функция? Как ее использовать?
А предположим какая-то функция неправильно отработала и вернула код ошибки без сообщения (это Win API функции любят делать), а ты захотел почитать по русски что за ошибка. Вот ты эту процедуру вызываешь:
Код:
if Какая_то_там_WinAPIFunction<>ERROR_SUCCESS then RaiseLastWin32Error
Дабы на экран вылезло текстовое описание ошибки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 11:19   #10
Anekdot
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 27
По умолчанию

hr := CoInitialize(nil);
if (hr <> S_OK) then
begin
RaiseLastWin32Error;
end

Вот так я применил процедуру и она выдала текст:
Project <project-name> raised exception class EOSError with message 'A call to an OS function failed'.

Что это значит?
CoInitialize это API'шная функция?
Anekdot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще раз о EAccessViolation. Andre1723 Общие вопросы Delphi 12 23.02.2009 01:39
Ошибка: "EAccessViolation with message..." Ravnica Помощь студентам 4 04.11.2007 20:46
Ошибка EAccessViolation num8er Общие вопросы Delphi 6 10.10.2007 08:00
то такое мастерство в программировании, что такое мастер программист и что он может? Cezar Свободное общение 29 02.06.2007 23:48
А что, если всем объедениться и создать что-нибудь глобальное? kuzmich Свободное общение 61 31.05.2007 21:01