|
Вопрос # 2 239/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты! Вот уже какой час бьюсь, не могу разобраться.
Моя программа использует функции, которые лежат в data.dll. Программа работает все как надо, но когда нажимаю "Закрыть" выдается ошибка:
"Exception EAccessViolation in module Data.DLL at 00001479. Access violation at address 00331479 in module 'data.DLL'. Write of address 00B49d34 "
Затем еще одна:
"Runtime error 216 at 00336F6"
Они повторяются друг за другом бесконечно. И выходит так , что программа закрывается лишь через диспечер...
Исходник прикрепляю к вопросу...
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Примечание #1 (27 декабря 2008, 19:02): Delphi 2007
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 27 декабря 2008, 18:58
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 28 декабря 2008, 20:16; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 27 декабря 2008, 19:16 [#1]:
Исходник скачать не удалось.
Интересно, что это за такой монструозный исходник, если он весит 386 кб В АРХИВЕ?
Предположу, что ты передаёшь динамические данные (строки, объекты и т.п.) в DLL и обратно. Это не есть гут.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 27 декабря 2008, 19:21 [#2]:
Исходник можно скачать здесь http://webfile.ru/2514795.
Да я действительно передаю строки, но только из Dll, обратно ничего не отправляется. Подскажите как можно исправить....
|
|
min@y™ (статус: Доктор наук), 27 декабря 2008, 19:33 [#3]:
Цитата:
Подскажите как можно исправить....
Передавай только PChar. Никаких string и потомков TObject. ShareMem, если есть в uses, выкинь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 27 декабря 2008, 19:37 [#4]:
Если вас не затруднит, не моглибы вы посмотреть исходник и подсказать что необходимо исправить...
|
|
min@y™ (статус: Доктор наук), 27 декабря 2008, 19:45 [#5]:
Я ненавижу разбираться в чужих исходниках, особенно ТАКОГО размера.
Передавай PChar вместо string. И всё. В инете материалов по этому поводу - ВАГОН.
Щас у меня тут вечер, концерт Задорного скоро, я пью пиво с воблой. Ну как ты думаешь, у тебя на моём месте возникло бы желание копаться в чужих исходниках при таких начальных условиях?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 27 декабря 2008, 19:52 [#6]:
Понимаю...И на этом спасибо...Буду работать.... Удачного вечера!
|
|
Ученый (статус: 8-ой класс), 27 декабря 2008, 20:41 [#7]:
То min@y™ Спасибо! Все разобрался. Преобразовал строки в PChar и все пошло...... Но есть одно но.... в ходе выполнения программы вылетает ошибка:
"Access violation at address 00404a4F in module 'Project1.exe'. Read of address 00000035."
Нажимаешь ок, и программа дальше себе работает. Чем может быть вызвана эта ошибка?
|
|
min@y™ (статус: Доктор наук), 27 декабря 2008, 20:57 [#8]:
Да хрен его знает. Access violation - это самая мерзкая ошибка. Её в общем случае надо локализовывать и ликвидировать только в дебаггере.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 27 декабря 2008, 21:03 [#9]:
Все нашел ошибку.... программа не виновата....программист такой.....
|
|
min@y™ (статус: Доктор наук), 27 декабря 2008, 21:12 [#10]:
Нет. Сегодня я пас. У меня тут пиво, вобла и кот. Завтра пиши, я на работу (если) приду и научу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ученый (статус: 8-ой класс), 28 декабря 2008, 14:56 [#11]:
Дак как на счет "локализовывать и ликвидировать только в дебаггере"?
|
|
Градов Ю.М. (статус: 8-ой класс), 28 декабря 2008, 17:00 [#12]:
Я надеюсь, что перед закрытием программы, Вы выгружаете свою DLL:
--------
var
Handle: THandle;
MyImportProc: TMyProc;
begin
Handle := LoadLibrary('data.DLL');
if Handle >= 32 then { if <=32 - error ! }
begin
@MyImportProc := GetProcAddress(Handle, 'MYEXPORTPROC');
if MyImportProc <> nil then
... {используем процедуру из DLL}
end;
FreeLibrary(Handle); { выгружаем dll }
end;
Попробуйте использовать обработчик ошибок:
except
ShowMessage('Ошибка при попытке использовать dll !');
finally
FreeLibrary(Handle01); { выгружаем dll }
end;
|
|
Ученый (статус: 8-ой класс), 28 декабря 2008, 20:16 [#13]:
Градов Ю.М. с этим я уже разобрался.... Все проблемы были из-за строк,передаваемых из DLL.....Просто заменил String на PChar
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|