| 
| 
 | Вопрос # 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 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |