Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Новичок в UDF на C++, CentOS 5 release final


Автор: tishaishii 27.3.2008, 16:52
Нашёл элементарный пример функции UDF на C++:

Код
//test.c
int modulo(int *, int *);
int modulo(a, b)int *a;int *b; {
    return *b?*a % *b:-1;
}


Код
gcc -c -O -fpic test.c;
ld -G test.o -lm -lc -o test.so;
cp -f test.so /opt/firebird/UDF/


Код
declare external function f_Modulo
  integer, integer
  returns
  integer by value
  entry_point 'modulo' module_name 'test.so';

commit;


Выполнил, без проблем. 
Однако, 
Код
select f_Modulo(3, 2) from rdb$database;
 не сработала. Говорит:
Код
Starting transaction...
Preparing query: 
select f_Modulo(3, 2) from rdb$database
*** IBPP::SQLException ***
Context: Statement::Prepare( 
select f_Modulo(3, 2) from rdb$database )
Message: isc_dsql_prepare failed

SQL Message : -104
can't format message 13:896 -- message system code -4

Engine Code    : 335544343
Engine Message :
invalid request BLR at offset 60
function F_MODULO is not defined
module name or entrypoint could not be found

Могли бы вы дать пару простейших примеров на C++ со строками.

Автор: Akella 27.3.2008, 17:33
может так?
Код

VAR = f_Modulo(3, 2);


Добавлено через 18 секунд
это в хранимке попробуй

Автор: ecspertiza 27.11.2008, 16:37
Щас сам разбераюсь с UDF на C++ точнее на QT , но нестоль важно
Код


extern "C" __declspec(dllexport) int Ret()
{
    cout << 1;
}



код на C++ должен выглядеть примерно так, но у меня Firebird значение выводит непонятно, хотя должна быть еденица, поковыряй мож у тя чё выйдет.

Автор: Akella 27.11.2008, 19:25
ecspertiza, посмотри на дату этой темы:
Цитата

27.3.2008

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)