Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2008, 16:37
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию Не передается

Имеется длл и главная программа. Там и там объявлен тип массива. В главной программе вызывается функция из длл которая передает этот тип. Далее в той же вызывающей процедуре я присваиваю переменой имеющую тот же тип результат этой функции. Потом при освобождении этой библиотеки вылетает ошибка. Как сделать так чтобы всё передавалось нормально?
Ответить с цитированием
  #2  
Старый 23.03.2008, 17:34
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Имя массива в Pascal - это фактически указатель на данные массива (примерно так же, как "длинные" строки AnsiString). Просто компилятор предоставляет нам удобный синтаксис для работы с такими указателями - выделяет и освобождает память самостоятельно.

Если я правильно понял вопрос, вы возвращаете массив из функции, которая расположена DLL? Если так, то и данные массива тоже расположены в сегменте данных DLL, а вы на самом деле возвращаете указатель на них. Пока DLL загружена - все нормально, но когда вы ее выгружаете, сегмент данных DLL освобождается, отсюда вероятнее всего и ошибка.

Чтобы избежать ошибки нужно не присваивать возвращаемое значение, а копировать массив, возвращаемый функцией в массив, который объявлен у вас в программе: Move(Source, Dest, Count);

Последний раз редактировалось Rosenkrantz, 23.03.2008 в 17:40.
Ответить с цитированием
  #3  
Старый 23.03.2008, 19:00
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Вы правильно поняли. Только так нифига и не получается. Если можно приведите код
Ответить с цитированием
  #4  
Старый 24.03.2008, 05:45
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Покажите, как у вас описана функция в DLL и как вы ее вызываете.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025