Подключение библиотеки FANN
Модератор: Модераторы
Подключение библиотеки FANN
Всем привет!
Возникла необходимость распознать изображение.
Решил использовать свободную нейросетевую библиотеку FANN
http://leenissen.dk/fann/
Библиотека поставляется в виде DLL и файла хэдера для нее.
Не удается подключить ее к файлу проекта. Может кто-нибудь сталкивался с этим.
Для Delphi на сайте есть все заголовочные файлы.
Возникла необходимость распознать изображение.
Решил использовать свободную нейросетевую библиотеку FANN
http://leenissen.dk/fann/
Библиотека поставляется в виде DLL и файла хэдера для нее.
Не удается подключить ее к файлу проекта. Может кто-нибудь сталкивался с этим.
Для Delphi на сайте есть все заголовочные файлы.
archer писал(а):Не удается подключить ее к файлу проекта.
А каким образом Вы её подключали?
Подключал я заголовочный файл, и ошибки возникали, например, в этой строчке
function fann_create_standard; external DLL_FILE;
когда я пытаюсь импортировать функцию из dll. Dll прописал в Path и в папке проекта лежит еще копия.
function fann_create_standard; external DLL_FILE;
когда я пытаюсь импортировать функцию из dll. Dll прописал в Path и в папке проекта лежит еще копия.
archer писал(а):...и ошибки возникали, например,...
Я, конечно, понимаю, что Вы потомок белорусских партизан и выпытывать секреты у Вас дело безнадёжное, но всё же, поделитесь текстом ошибки.
Этот кусочек из файла fann.pas
Код: Выделить всё
implementation
{$IFDEF VARIABLE_ARGUMENTS}
function fann_create_standard; external DLL_FILE;
Такая ошибка синтаксиса.
FANN.pas(813,36) Fatal: Syntax error, ":" expected but ";" found
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Функция должна возвращать результат, всё верно.
В вашем случае варианта два - либо узнать, что возвращает функция и написать что-то типа:
либо заменить функцию на процедуру:
Точнее сказать трудно, не зная, что делает именно эта функция.
В вашем случае варианта два - либо узнать, что возвращает функция и написать что-то типа:
Код: Выделить всё
function fann_create_standard: integer; external DLL_FILE; либо заменить функцию на процедуру:
Код: Выделить всё
procedure fann_create_standard; external DLL_FILE; Точнее сказать трудно, не зная, что делает именно эта функция.
и в том и в другом случае строчка успешно компилится, но таких строчек в файле больше 100,
и все они описаны как функции, которые ничего не возвращают, хотя есть, которые называются
типа get_max_size, например, и они также ничего не возвращают(!).
У меня есть некоторые идеи, по этому поводу, если будет найдено решение, опубликую результат здесь.
и все они описаны как функции, которые ничего не возвращают, хотя есть, которые называются
типа get_max_size, например, и они также ничего не возвращают(!).
У меня есть некоторые идеи, по этому поводу, если будет найдено решение, опубликую результат здесь.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Посмотрел на файл, который вы пытаетесь отредактировать... Вся проблема в том, что Делфи поддерживает сокращенное описание функций и процедур в разделе implementation. Вся информация есть выше в этом же файле
Да, сегодня буду редактировать, надеюсь заработает.
Проще поставить в начале файла директиву $MODE DELPHI - тогда можно будет, как и в Delphi, писАть в разделе Implementation сокращённо.
Полные заголовки функций (кстати, в Implementation опущены не только типы возврата, но и параметры) смотрите в Interface.
Полные заголовки функций (кстати, в Implementation опущены не только типы возврата, но и параметры) смотрите в Interface.
Код: Выделить всё
procedure fann_destroy(Ann: PFann); external DLL_FILE;FANN.pas(843,19) Error: Calling convention doesn't match forward
Написал ко всем функциям полные заголовки.
Режим тоже поменял, все равно ошибается.
Мне не нужно использовать все функции и процедуры из библиотеки, только около 10 функций, и то, может меньше.
Но без procedure fann_destroy не получится нормально работать с библиотекой.
И не только в этой процедуре возникает ошибка, в некоторых тоже, где фигурирует тип PFann.
В чём проблема? Объявите её так:
Код: Выделить всё
procedure fann_destroy(Ann: PFann); cdecl; external DLL_FILE;да, точно, Вы правы.
В большинстве функций теперь нет ошибок, ошибки возникают в функциях, которые не возвращают ничего.
FANN.pas(861,49) Fatal: Syntax error, ":" expected but ";" found
Можно ли переименовать ее в процедуру (везде), будет ли она успешно импортирована из DLL?
В большинстве функций теперь нет ошибок, ошибки возникают в функциях, которые не возвращают ничего.
Код: Выделить всё
function fann_get_num_output(Ann: PFann);cdecl; external DLL_FILE; FANN.pas(861,49) Fatal: Syntax error, ":" expected but ";" found
Можно ли переименовать ее в процедуру (везде), будет ли она успешно импортирована из DLL?
из названия видно, что она должна что-то возвращать! Читайте внимательно исходник.
Добавлено спустя 18 секунд:
Добавлено спустя 18 секунд:
Код: Выделить всё
function fann_get_num_output(Ann: PFann): cardinal;cdecl; external DLL_FILE;Сейчас проверю.
Закомментировал "плохие" функции и код выше выдает такую ошибку:
FANN.pas(402,18) Error: Forward declaration not solved "fann_create_standard_array(LongWord,const PCardinal):^TFann; CDecl;"
Исходник не изменял, все описания типов в самом начале, как и полагается.
Код: Выделить всё
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;"
Исходник не изменял, все описания типов в самом начале, как и полагается.
