Подключение библиотеки FANN

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Подключение библиотеки FANN

Сообщение archer » 23.10.2010 20:50:57

Всем привет!

Возникла необходимость распознать изображение.
Решил использовать свободную нейросетевую библиотеку FANN
http://leenissen.dk/fann/
Библиотека поставляется в виде DLL и файла хэдера для нее.

Не удается подключить ее к файлу проекта. Может кто-нибудь сталкивался с этим.
Для Delphi на сайте есть все заголовочные файлы.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Vadim » 24.10.2010 06:23:46

archer писал(а):Не удается подключить ее к файлу проекта.

А каким образом Вы её подключали?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение archer » 24.10.2010 07:50:37

Подключал я заголовочный файл, и ошибки возникали, например, в этой строчке
function fann_create_standard; external DLL_FILE;
когда я пытаюсь импортировать функцию из dll. Dll прописал в Path и в папке проекта лежит еще копия.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Vadim » 24.10.2010 08:42:42

archer писал(а):...и ошибки возникали, например,...

Я, конечно, понимаю, что Вы потомок белорусских партизан и выпытывать секреты у Вас дело безнадёжное, но всё же, поделитесь текстом ошибки.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение archer » 24.10.2010 14:35:26

:) Извиняюсь, я не партизан.

Этот кусочек из файла fann.pas
Код: Выделить всё
implementation
          {$IFDEF VARIABLE_ARGUMENTS}
          function fann_create_standard; external DLL_FILE; 


Такая ошибка синтаксиса.
FANN.pas(813,36) Fatal: Syntax error, ":" expected but ";" found
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Nik » 24.10.2010 14:49:48

Функция должна возвращать результат, всё верно.

В вашем случае варианта два - либо узнать, что возвращает функция и написать что-то типа:

Код: Выделить всё
function fann_create_standard: integer; external DLL_FILE;


либо заменить функцию на процедуру:

Код: Выделить всё
procedure fann_create_standard; external DLL_FILE;


Точнее сказать трудно, не зная, что делает именно эта функция.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Подключение библиотеки FANN

Сообщение archer » 24.10.2010 15:02:44

и в том и в другом случае строчка успешно компилится, но таких строчек в файле больше 100,
и все они описаны как функции, которые ничего не возвращают, хотя есть, которые называются
типа get_max_size, например, и они также ничего не возвращают(!).

У меня есть некоторые идеи, по этому поводу, если будет найдено решение, опубликую результат здесь.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Padre_Mortius » 24.10.2010 15:24:20

Посмотрел на файл, который вы пытаетесь отредактировать... Вся проблема в том, что Делфи поддерживает сокращенное описание функций и процедур в разделе implementation. Вся информация есть выше в этом же файле
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Подключение библиотеки FANN

Сообщение archer » 24.10.2010 20:08:20

Да, сегодня буду редактировать, надеюсь заработает.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение and » 25.10.2010 20:57:04

Проще поставить в начале файла директиву $MODE DELPHI - тогда можно будет, как и в Delphi, писАть в разделе Implementation сокращённо.
Полные заголовки функций (кстати, в Implementation опущены не только типы возврата, но и параметры) смотрите в Interface.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: Подключение библиотеки FANN

Сообщение archer » 26.10.2010 16:26:22

Код: Выделить всё
procedure fann_destroy(Ann: PFann); external DLL_FILE;


FANN.pas(843,19) Error: Calling convention doesn't match forward

Написал ко всем функциям полные заголовки.
Режим тоже поменял, все равно ошибается.
Мне не нужно использовать все функции и процедуры из библиотеки, только около 10 функций, и то, может меньше.
Но без procedure fann_destroy не получится нормально работать с библиотекой.
И не только в этой процедуре возникает ошибка, в некоторых тоже, где фигурирует тип PFann.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Mr.Smart » 26.10.2010 16:42:21

В чём проблема? Объявите её так:
Код: Выделить всё
procedure fann_destroy(Ann: PFann); cdecl;  external DLL_FILE;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Подключение библиотеки FANN

Сообщение archer » 26.10.2010 16:59:33

да, точно, Вы правы.
В большинстве функций теперь нет ошибок, ошибки возникают в функциях, которые не возвращают ничего.
Код: Выделить всё
  function fann_get_num_output(Ann: PFann);cdecl; external DLL_FILE; 

FANN.pas(861,49) Fatal: Syntax error, ":" expected but ";" found

Можно ли переименовать ее в процедуру (везде), будет ли она успешно импортирована из DLL?
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

Re: Подключение библиотеки FANN

Сообщение Mr.Smart » 26.10.2010 17:14:00

из названия видно, что она должна что-то возвращать! Читайте внимательно исходник.

Добавлено спустя 18 секунд:
Код: Выделить всё
function fann_get_num_output(Ann: PFann): cardinal;cdecl; external DLL_FILE;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Подключение библиотеки FANN

Сообщение archer » 26.10.2010 17:21:29

Сейчас проверю.
Код: Выделить всё
function fann_create_standard_array(num_layers: Cardinal; const layers: PCardinal): PFann; cdecl;

Закомментировал "плохие" функции и код выше выдает такую ошибку:
FANN.pas(402,18) Error: Forward declaration not solved "fann_create_standard_array(LongWord,const PCardinal):^TFann; CDecl;"
Исходник не изменял, все описания типов в самом начале, как и полагается.
archer
незнакомец
 
Сообщения: 9
Зарегистрирован: 23.10.2010 20:38:40
Откуда: Красноярск

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru