![]() |
|
#1
|
|||
|
|||
![]() Имеется длл и главная программа. Там и там объявлен тип массива. В главной программе вызывается функция из длл которая передает этот тип. Далее в той же вызывающей процедуре я присваиваю переменой имеющую тот же тип результат этой функции. Потом при освобождении этой библиотеки вылетает ошибка. Как сделать так чтобы всё передавалось нормально?
|
#2
|
|||
|
|||
![]() Имя массива в Pascal - это фактически указатель на данные массива (примерно так же, как "длинные" строки AnsiString). Просто компилятор предоставляет нам удобный синтаксис для работы с такими указателями - выделяет и освобождает память самостоятельно.
Если я правильно понял вопрос, вы возвращаете массив из функции, которая расположена DLL? Если так, то и данные массива тоже расположены в сегменте данных DLL, а вы на самом деле возвращаете указатель на них. Пока DLL загружена - все нормально, но когда вы ее выгружаете, сегмент данных DLL освобождается, отсюда вероятнее всего и ошибка. Чтобы избежать ошибки нужно не присваивать возвращаемое значение, а копировать массив, возвращаемый функцией в массив, который объявлен у вас в программе: Move(Source, Dest, Count); Последний раз редактировалось Rosenkrantz, 23.03.2008 в 17:40. |
#3
|
|||
|
|||
![]() Вы правильно поняли. Только так нифига и не получается. Если можно приведите код
|
#4
|
|||
|
|||
![]() Покажите, как у вас описана функция в DLL и как вы ее вызываете.
|