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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2016, 11:44
vectorj vectorj вне форума
Прохожий
 
Регистрация: 29.11.2016
Сообщения: 5
Версия Delphi: Rad Studio XE2
Репутация: 10
По умолчанию Передача массива в DLL

Добрый день, столкнулся с проблемой передачи массива в DLL (сама DLL написана на С). Суть в том, что в одном из параметров процедуры должен получится массив с данными.

Описание процедуры в интерфейсной части:
function nc_get_vara_double (ncID: integer;varID: integer;start: pointer;count: pointer;var arr: pointer):integer; cdecl; external 'netcdf.DLL';
arr - это и есть желаемый массив.

в самой программе вызывается так:
var ptr: pointer;
start,count: Array of int64;
hgtId: integer;
....
err:=nc_get_vara_double(ncID,hgtID,start,count,ptr );

если я хочу получить 1 число, то проблем нет, все работает. А вот если я хочу получить вектор или матрицу то получаю следующее:


Описание самой процедуры: http://www.unidata.ucar.edu/software/netcdf/docs/group__variables.html#ga3b772c0982850cb0af3a8d1c53 c81d46
Ответить с цитированием
  #2  
Старый 29.11.2016, 13:54
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Указатель на первый элемент динамического массива @Arr[0]
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 29.11.2016, 14:02
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Если
int nc_get_vara_double ( int ncid,
int varid,
const size_t * startp,
const size_t * countp,
double * ip
)
то
Код:
type
   PInteger=^Integer;
   PDouble =^Double;
function nc_get_vara_double 	(ncid:Integer;
		varid:Integer;
		startp:PInteger;
		countp:PInteger;
		ip :PDouble;
	) 	:Integer;cdecl; external 'netcdf.DLL';
и
Код:
var 
ptr: Array of Double;
start,count: Array of int64;
hgtId: integer;
....
err:=nc_get_vara_double(ncID,hgtID,@start[0],@count[0],@ptr[0] );
Ответить с цитированием
  #4  
Старый 29.11.2016, 18:51
vectorj vectorj вне форума
Прохожий
 
Регистрация: 29.11.2016
Сообщения: 5
Версия Delphi: Rad Studio XE2
Репутация: 10
По умолчанию

Спасибо, все заработало!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter