Показать сообщение отдельно
  #1  
Старый 22.09.2011, 09:58
axline axline вне форума
Прохожий
 
Регистрация: 22.09.2011
Сообщения: 5
Репутация: 10
По умолчанию Подключение 'С' библиотеки: вектор size_t

Здравствуйте, уважаемые форумчане!

Подключаю к проекту на Дельфи 2010 dll'ку, написанную на Си. Портировал большинство функций, но на одной застрял. Процедура должна возвращать указатель на массив значений double, который она вытаскивает из некоего файла. Файл представляет собой матрицу, значения которой задаются индексом start. Матрица может иметь различную размерность. Соответственно, start - это вектор значений cardinal (например, для первого значения матрицы (x, y, z) start={1,1,1}).

Есть Си код процедуры, который в исходниках объявляется как:
putNCvx_double_double(NC *ncp, const NC_var *varp,
const size_t *start, size_t nelems, const double *value)

В мануале к продукту для вызова функции предлагают использовать следующее:
int nc_get_var1_double (int ncid, int varid, const size_t index[], double *fp);

Собственно, вопрос: каким типом данных Дельфи можно описать const size_t index[]? Вызываю функцию так:

function nc_get_var1_double (ncid : integer; varid : integer; var indexp :
array of size_t; ip : array of double) : integer; cdecl; external 'netcdf.DLL';

Size_t объявлен как cardinal. При объявлении "var indexp :array of size_t" dll ругается. Если убрать массив (var indexp : size_t) - работает только при размерности матрицы = 1 столбцу.

Интуитивно понятно, что что-то элементарное, но не сообразить =)
Ответить с цитированием