![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 22.09.2011
Сообщений: 4
|
![]()
Здравствуйте, уважаемые форумчане!
Подключаю к проекту на Дельфи 2010 dll'ку, написанную на Си. Портировал большинство функций, но на одной застрял. Процедура должна возвращать указатель на массив значений double, который она вытаскивает из некоего файла. Файл представляет собой матрицу. Индекс элемента, с которого начитается выборка, задается как const size_t index[]. В мануале к продукту для вызова функции предлагают использовать следующее: int nc_get_var1_double (int ncid, int varid, const size_t index[], double *fp); Декларирую функцию в дельфи так: function nc_get_var1_double (ncid : integer; varid : integer; indexp : array of size_t; ip : array of double) : integer; cdecl; external 'netcdf.DLL'; Size_t объявлен как cardinal. При объявлении "indexp :array of size_t" dll ругается. Если убрать массив (indexp : size_t) - работает только при размерности матрицы = 1 столбцу. Собственно, вопрос: как в Дельфи можно описать const size_t index[]? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
Как ругается? Память под массив выделили?
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 22.09.2011
Сообщений: 4
|
![]()
Вызываю так:
Код:
Аналогичная функция, вытаскивающая полностью матрицу: function nc_get_var_float (ncid : integer; varid : integer; Var ip : array of single) :integer; cdecl; external 'netcdf.DLL'; работает без проблем. Код функции в исходном коде процедуры следующий: Код:
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 22.09.2011
Сообщений: 4
|
![]()
Разобрался! Дело в непонимании array of... Следующий код работает:
Код:
Код:
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 22.09.2011
Сообщений: 4
|
![]()
Столкнулся с интересной вещью. При объявлении динамического массива как статического все работает: Tsize_tArray=array [0..2] of size_t;
Но как быть, если размер массива переменный? Например, я не знаю в дизайнтайме, какой размер у матрицы. Ставить заведомо большее число нельзя - dll читает конкретное количество записей. Можно ли как-нибудь поменять размер передаваемого массива? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подключение библиотеки string | skgwazap | Visual C++ | 7 | 26.11.2010 09:29 |
Подключение дополнительной библиотеки компонентов | alex_28 | БД в Delphi | 4 | 28.09.2010 16:47 |
Подключение библиотеки mp3Pro | AlexSol.BY | Помощь студентам | 1 | 23.04.2010 19:04 |
Подключение библиотеки BASS? | Ferz-2009 | Мультимедиа в Delphi | 2 | 29.12.2009 08:15 |
подключение библиотеки mfc | ruavia3 | Microsoft Office Excel | 0 | 06.10.2009 17:13 |