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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новичок в UDF на C++, CentOS 5 release final, LI-V2.0.3.12981 FirebirdSS 2.0, Linux 
:(
    Опции темы
tishaishii
Дата 27.3.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Нашёл элементарный пример функции 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++ со строками.

Это сообщение отредактировал(а) tishaishii - 27.3.2008, 16:56
PM MAIL ICQ Skype   Вверх
Akella
Дата 27.3.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



может так?
Код

VAR = f_Modulo(3, 2);


Добавлено через 18 секунд
это в хранимке попробуй
PM MAIL   Вверх
ecspertiza
Дата 27.11.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



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


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



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


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Akella
Дата 27.11.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



ecspertiza, посмотри на дату этой темы:
Цитата

27.3.2008

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.