Отказ от ответственности: то, что написано ниже, относится к исходной версии вопроса до того, как он был полностью изменен.В оригинальной версии все параметры с плавающей точкой были плавающими.Я бы посоветовал Майку опубликовать реальный код, используя копирование / вставку, чтобы не тратить время людей.
C float эквивалентно Delphi Single, 4-байтовому типу с плавающей запятой.Это основная проблема, с которой вы столкнулись.
Я бы лично объявил массивы как PSingle или PInteger в объявлении импорта, а не использовал параметры var.При передаче одиночных значений по ссылке, тогда уместно использовать параметры var.
При вызове функции я бы не использовал массивы с фиксированными размерами.Я бы использовал динамические массивы и SetLength.Затем передайте массив с помощью PSingle (MyArray) или @MyArray [0], в зависимости от того, что вы предпочитаете.
Я бы предпочел Integer, а не Longint, так как я считаю, что Integer наиболее близко соответствует C int.
Ваши массивы имеют размер 1001 элемент, вам нужно, чтобы они были только 1000.
Структура лучше всего передается var, как она есть в объявлении импорта, а не как в вызове.Поскольку код в вашем вопросе не совсем совпадает, я не хочу больше ничего говорить.
function flann_radius_search_double(
index_ptr: flann_index_t;
var query: Single;
indices: PInteger;
dists: PSingle;
max_nn: Integer;
radius: Single;
var flann_params: FLANNParameters
): Integer; cdecl; external External_library Name 'flann_radius_search_double';
...
var
indices: array of Integer;
dists: array of Single;
...
SetLength(indices, 1000);
SetLength(dists, 1000);
radius_s := flann_radius_search_double(
idx,
MyArray[0,0],
@indicies[0],
@dists[0],
1000,
10.0,
DEFAULT_FLANN_PARAMETERS
);