| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Access Violation при вызове функции из DLL |
| Автор: mr.Anderson 7.8.2007, 17:10 | ||||||||||
| Возникла проблема при написании DLL. Собственно код DLL:
DLL позиционируется как плагин к моей программе. В связи с этим я ввел глобальный тип:
А также глобальный динамический массив с плагинами:
Код загрузки плагинов:
Код вызова функции из DLL выглядит так (именно здесь происходит ошибка, судя по заверениям отладчика):
Ошибка в следующем. Выполнение (по отладчику), доходит до строки ShowMessage( GetFileExpression() ); (из последнего фрагмента кода). Верно выводит сообщение с правильным текстом (как в DLL описано). Однако, после этого вылетает Access Violation с ошибкой 'Недопустимая операция с указателем' ('Invalid Pointer Operation'). Как я ни пытался отловить ошибку - найти ее причину не смог. Ошибка 100% где-то в приведенных фрагментах кода, т.к. если убрать вызов ShowMessage, то Access Violation не возникает. Вопрос описал достаточно подробно, надеюсь. Кто может помочь? |
| Автор: Snowy 7.8.2007, 17:25 |
| Ну так кто ж тебя учил юзать стринги в dll? Да ещё для плагинов... Сейчас конечно тебе тут напомнят про ShareMem... Но что за плагин, если его можно только на дельфи написать? Тогда уж bpl юзай. Или используй общие типы: pointer, dword, PChar... |
| Автор: ASGDeveloper 7.8.2007, 17:28 |
Все компилится и работает. Бага где-то в другом месте. |
| Автор: mr.Anderson 7.8.2007, 17:37 |
| А у меня не компилится и не работает. Даже с ShareMem. После его подключения эта же ошибка стала лезть после закрытия приложения. Добавлено через 7 минут и 28 секунд В общем, вопрос решил. Через FastShareMem и обход глюков в OnClose формы. |
| Автор: skyboy 10.8.2007, 10:59 |
| ShareMem должно быть первым в списке как в библиотеке, так и в твоем приложении(не в unit1.pas, а в dpr-файле!) тогда никаких глюков не будет. впрочем, Showy прав - тогда уж лучше bpl юзать, раз связь с другими ЯП не прредусматривается |