![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| albi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.10.2006 Репутация: нет Всего: нет |
Плиз, помогите понять в чем ошибка:
есть ddl-ка с функцией f1() параметром, которой является массив В проекте при вызове этой функции возникает ошибка "Project Project1.exe raised exeption class EAccessViolation with message 'Access violation at adress 00D23540. Read of adress..'..'" Как я поняла '003D23540' есть handle на саму функцию f1, хотя связывание происходит нормально. На каком этапе ошибка, при компиляции самой ddl-ки ошибок нет! |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, это адрес размещения массива в памяти.
Попробуй передавать массив, как var. А лучше покажи код - может там ошибка. |
|||
|
||||
| albi |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.10.2006 Репутация: нет Всего: нет |
Вообще тут целый массив из функций, буду более подробно:
здесь вроде ошибок нет - загружаем библиотеку и все функции
Даже если пытаюсь просто вычислить значение функций в некоторой точке опять эты ошибка! а в самой ddl-ке, например f1:
Боюсь, что таким кодом можно только запутать, вряд ли что-то становится понятней?! Добавлено @ 00:02 Вообще тут целый массив из функций, буду более подробно: здесь вроде ошибок нет - загружаем библиотеку и все функции
Даже если пытаюсь просто вычислить значение функций в некоторой точке опять эты ошибка! а в самой ddl-ке, например f1:
Боюсь, что таким кодом можно только запутать, вряд ли что-то становится понятней?! |
||||||||
|
|||||||||
| albi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.10.2006 Репутация: нет Всего: нет |
Вопрос в продолжение, возможно, что ошибка возникает из-за вызова в функции f1 функции w1 и прога просто не находит ее?
надо функцию w1 объявлять в public? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Это как? Это же функция, а не метод класса. Предполагаю, что дело в соглашении о передаче параметров StdCall И прототип и сама функция в библиотеке должны (или оба не должны) быть объявлены с этой директивой, иначе происходит неверное обращение к памяти. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 3 Всего: 6 |
Что за тип "mas"? Я не нашел его определения. Так же как и большинства остальных переменных. Кстати, неизвестно как в dll попадает переменная kol_ve...
Но, ладно. Приведу общие принципы (свои) в подобных случаях. Итак, так как я не видел определения mas, то советую ПЕРВЫМ юнитом проекта (dll) поставить ShareMem. Затем, не закрывая проекта, идем в меню Run - Parameters, устанавливаем HostApplication (тот exe, которым ты тестишь dll), устанавливаем бряку в теле функции fl, нажимаем F9, и смотрим, что передается в качестве параметра. Но в целом, я бы советовал передавать указатель на массив, и число элементов, иными словами:
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
| albi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.10.2006 Репутация: нет Всего: нет |
Спасибо огромное за содействие, разобралась. Ответ в моем случае был проще!
mas - это тип который описан в модуле data, и большинство остальных переменных также описаны в этом модуле - этакий модуль с глобальными переменными. Так вот в функциях f[i],w[i],k[i] используются эти переменные. Получилось что dll-ка компилируется раньше чем файл data загружаются значения всех переменных, и в функции k1 происходит деление на 0 (потому что значение переменной T_op не передалось!) оттуда все ошибки и пошли. Дописала процедуру в которой фактически инициализирую все переменные и только после этого вызываю все нужные функции.
Спасибо за замечание, обязательно приму к сведению. СПАСИБО!!! Большое спасибо, Snowy, alexeis1, sansa! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |