|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Fakovka999 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.1.2017 Репутация: нет Всего: нет |
Здравствуйте извините если напишу что не понятно... пока не разбирался как и что здесь оформляется)
Проблема в чем? 1. Хочу передать динамический массив в Dll-----------сделано (+) 2. Передать динамический массив из Dll обратно-----сделано (+) 3. Передать из Dll измененный размер Динамического массива ------- и вот тут я застрял... Вопрос можно ли менять размер динамического массива переданного из программы в Dll в самом Dll? Вот простые наброски для проверки что делал я... Общий Type....
Модуль программы....
Ну и сам Dll....
объясните пожалуйста почему так? ах да... Ошибка EAccessViolation... обращение к несуществующему объекту... |
||||||
|
|||||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
используй ShareMem или SimpleShareMem
-------------------- Обижено школьников: 8 |
|||
|
||||
Fakovka999 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.1.2017 Репутация: нет Всего: нет |
ShareMem проблему не решает...
Давайте не будем отвечать бездумно или в стиле Mail.ru "ответы"... ShareMem может и решает проблемы, но все же больше увеличивает их... использовалось уже ранее
|
|||
|
||||
bems |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
не знаю что там он тебе увеличивает, но для того чтобы была возможность освободить память, выделенную другим модулем у обоих модулей (exe и dll) должен быть общий менеджер памяти. что собсно и достигается юнитами которые я упомянул. подключать нужно и в exe и в dll. может у тебя тут есть еще какая-то проблема, но это не значит что ShareMem не нужен -------------------- Обижено школьников: 8 |
|||
|
||||
Fakovka999 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.1.2017 Репутация: нет Всего: нет |
При использовании sharemam выскакивает ошибка, в общемто та же самая только уже после закрытия программы((( вроде все высвободил и вроде передается и используется 1 блок памяти... Если можете попробовать у себя ( delphi 7) скажите работает ли у вас с моим кодом
|
|||
|
||||
bems |
|
||||||
Эксперт Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
мне не удалось это воспроизвести. у меня та же ошибка не возникает. когда я по ошибке подключил ShareMem в юните формы, то возникла ошибка EInvalidPointer (то есть НЕ EAccessViolation). потом я перенёс ShareMem в самое начало секции uses проекта (как и должно быть) и ошибки при выходе из приложения исчезли вообще
-------------------- Обижено школьников: 8 |
||||||
|
|||||||
kami |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
нельзя. Последовательность (безо всяких ShareMem) должна быть такой: Вариант 1 (попроще): 1. Приложение вызывает dll и спрашивает "какой размер массива тебе нужен, чтобы передать мне данные?" 2. Приложение выделяет именно такой размер 3. Приложение запрашивает dll с использованием указанного буфера. Вариант 2 решил не писать, там сложновасто. В любом случае - нельзя из одного модуля менять память, выделенную в другом модуле. ShareMem - это хорошо, до тех пор, пока работа ведется только на Delphi (кажется есть еще условие - одной версии, но здесь могу ошибаться). |
|||
|
||||
Fakovka999 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.1.2017 Репутация: нет Всего: нет |
Ладно будем пробовать... почитал литературу... примерно разобрался что и как работает... пока вроде получается... Спасибо...
Добавлено через 14 минут и 27 секунд м кстате такая штука... я понимаю что это вроде как не правильно но это работает))) допустим в программе....
а вот в функции (Dll)...
по идее массив 'b' перехвачен 'а' и освобождать мы должны сначала 'а', а потом b... но правильно ли будет если сделать так... хотя все работает |
||||
|
|||||
Fakovka999 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.1.2017 Репутация: нет Всего: нет |
блин да точно... ступил опять... сори |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |