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