powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / проблемы переписи с дельфей на с++ под линухом
26 сообщений из 26, показаны все 2 страниц
проблемы переписи с дельфей на с++ под линухом
    #38569637
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В с++ я к сожалению не силён, поэтому просьба пинать не сильно.
Долго и нудно пытаюсь переписать свои виндовые udf под линух. На текущий момент родилось такое:

=== my_udf.cpp ===
#include <iostream>
#include <cstdio>
using namespace std;
extern string FormatIBFloat (double f)
{
char s[20];
sprintf(s, "%.2f", f);
return s;
}

Она просто форматирует число в строку.
Откомпилировал так: c++ my_udf.cpp -shared -fPIC -o libmy_udf.so

Положил libmy_udf.so в /usr/lib/firebird/2.5/UDF
Сказал: sudo /etc/init.d/firebird2.5-classic restart

Запустил от рута (для чистоты эксперимента) консоль isql-fb. Объявил в базе:
SQL> DECLARE EXTERNAL FUNCTION FORMATFLOAT
CON> DOUBLE PRECISION
CON> RETURNS CSTRING(20) FREE_IT
CON> ENTRY_POINT 'FormatIBFloat' MODULE_NAME 'libmy_udf.so';

Дальше попросил:
SQL> select formatfloat(123.456) from rdb$database;

Получил в ответ:
Statement failed, SQLSTATE = 39000
invalid request BLR at offset 63
-function FORMATFLOAT is not defined
-module name or entrypoint could not be found

Права стоят такие:
ls -lh /usr/lib/firebird/2.5/UDF
итого 96K
-rw-r--r-- 1 root root 19K февр. 5 2013 fbudf.so
-rw-r--r-- 1 root root 7,0K февр. 5 2013 fbudf.sql
-rw-r--r-- 1 root root 19K февр. 5 2013 ib_udf2.sql
-rw-r--r-- 1 root root 15K февр. 5 2013 ib_udf.so
-rw-r--r-- 1 root root 19K февр. 5 2013 ib_udf.sql
-rwxr-xr-x 1 root root 8,7K февр. 22 19:55 libmy_udf.so

думаю х ей не мешает.. впрочем без него не лучше

Где тут есть ошибки?
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisГде тут есть ошибки?
Везде. Читай http://ibase.ru/develop.htm#udf
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569648
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВезде. Читай http://ibase.ru/develop.htm#udf

C этого и начинал. Под виндой и на паскале всё работает уже много лет.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569654
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenischar s[20];
sprintf(s, "%.2f", f);
return s;
совсем не сочетается с free_it. возьми как пример любую простую библиотеку, хоть fbudf, хоть rfunc, главное чтобы на Ц было.
Потом, я не силен в С, но extern в данном случае не то.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569657
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisПод виндой и на паскале всё работает уже много лет.
кстати, были случаи, когда "много лет" работал реально кривой код. Не в самой функции, а в объявлении параметров, с stdcall, и т.д. Просто так совпало, что функция только прикидывалась, что работала. Как только что-то меняли - блямс, и работать переставало.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569674
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар, не выпендривайся, просто собери свою библиотеку свежим FPC.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569732
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, ну, конечно, всё может быть...
Но за много лет она работала на разных осях от ХР до 2008 сервера, на многих машинах, перекомпилировалась под х64, многократно переписывалась, оптимизировалась и т.п. Наверно, там не всё идеально, но к работе до сих так претензий и не проявилось, даже на некорректных данных...
Но rfunc я посмотрю непременно. Просто сложно быстро разобраться в чужом коде, тем более не зная языка.

Аффтар, не выпендривайся, просто собери свою библиотеку свежим FPC.
От чего же непременно не выпендриваться? Что-то новое тоже хочется попробовать.
Интересны были бы ответы знающих с++: какой тип данных лучше использовать, правильные директивы для экспорта...
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569768
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisИнтересны были бы ответы знающих с++: какой тип данных лучше использовать,
правильные директивы для экспорта...
Не в типах данных и не в директивах экспорта проблема: они не отличаются от дельфийских.
Ты совершенно не понимаешь работу с памятью и область видимости/время жизни переменных. А
это базовые вещи, независимые от языка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569799
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы совершенно не понимаешь работу с памятью

Уважаемый, ты об этом делаешь выводы по кусочку кода, написанному на незнакомом мне языке, с незнакомыми и ОТЛИЧНЫМИ от дельфи механизмами работы с памятью строк? Я даже не буду тебе что-то доказывать.
Хочешь помочь - велкам. Если просто есть желание пальцами водить - спускайся на лавочку к подъезду - там оценят.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569807
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis> Хочешь помочь - велкам

Так тебе уже подсказали - внутри функции с памятью
неправильно работаешь (посмотри в любой UDF-ке).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisты об этом делаешь выводы по кусочку кода, написанному на незнакомом мне
языке, с незнакомыми и ОТЛИЧНЫМИ от дельфи механизмами работы с памятью строк?
Ага. Ответь на два вопроса: в своих UDF на Дельфи ты тоже
1) Возвращаешь String?
2) Возвращаешь указатель на локальную переменную?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569811
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам(посмотри в любой UDF-ке)
В любой - не надо. У kdv на сайте толпа кривых примеров, где память выделяется malloc-ом,
как и в rfunc. Правильные примеры - это штатные ibudf и fbudf.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569819
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что забавно, в udflib.c из examples тоже malloc.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569822
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамв udflib.c из examples тоже malloc.
В трекер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38569839
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovУ kdv на сайте толпа кривых примеров, где память выделяется malloc-ом, как и в rfunc.
в rfunc уже давно должен быть ib_util_malloc. в changes.txt это написано, кстати.
а насчет "кривых примеров" - ты бы мне потыкал, а я бы их покоцал. Ну или сам на недельке перепроверю, почище.

sydenisты об этом делаешь выводы по кусочку кода, написанному на незнакомом мне языке
так вот и вызывает удивление, что ты на сях сделал все совершенно по другому, чем у тебя на дельфях.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570138
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтак вот и вызывает удивление, что ты на сях сделал все совершенно по другому, чем у тебя на дельфях.
Замечание верное. Но в том-то и вопрос у меня.
Если в винде я знаю каким менеждером памяти пользуется fb и в своём коде соотв. образом выделяю память под строки, то с++ для меня тёмный лес - я даже не знаю как там называется ib_util_malloc и как её вызвать.
Это в винде. А в линухе - там может быть совсем другой менежер, с другими именами функций... мне это неизвестно. Вот я спрашиваю.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570140
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisЕсли в винде я знаю каким менеждером памяти пользуется fb и в своём коде соотв. образом выделяю память под строки, то с++ для меня тёмный лес - я даже не знаю как там называется ib_util_malloc и как её вызвать.
Шутишь, да?

Загляни в {PF}\Firebird\include\ib_util.*
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570190
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisЕсли в винде я знаю каким менеждером памяти пользуется fb и в своём коде соотв. образом выделяю память под строки, то с++ для меня тёмный лес - я даже не знаю как там называется ib_util_malloc и как её вызвать.Ты действительно думаешь, что менеджер памяти в ФБ зависит о того, на чём ты пишешь УДФ ?
Ты хоть один пример из стандартных УДФ смотрел ? (я знаю ответ на этот вопрос)
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570242
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЗагляни в {PF}\Firebird\include\ib_util.*
Вот. Уже ближе к теме.
Теперь интересно каким менеджером / имя функции выделять память под строки в udf в линуксе.
hvlad
Ты действительно думаешь, что менеджер памяти в ФБ зависит о того, на чём ты пишешь УДФ ?

Укажи точное место в моём посте из которого ты сделал этот вывод.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570287
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisТеперь интересно каким менеджером / имя функции выделять память под строки в udf в линуксе.
Заглянул хоть в ib_util.h? Это ВСЁ, что нужно.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570365
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisУкажи точное место в моём посте из которого ты сделал этот вывод.Я его процитировал
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570505
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЗаглянул хоть в ib_util.h? Это ВСЁ, что нужно.
ОК нашёл. Он в /usr/include лежит - так сходу фиг догадаешься.
Теперь вопрос - каким из строковых типов с++ посоветуете пользоваться?
hvlad Я его процитировал
Тогда прям по буквам - покажи где там буквы "ФБ" и где там буквы "зависит"?
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570533
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenisкаким из строковых типов с++ посоветуете пользоваться?
Тот, который поддерживает UTF8.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570621
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis,

Модератор: С посылами завязываем.
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570635
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sydenis> Теперь вопрос - каким из строковых типов с++ посоветуете пользоваться?

char*
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проблемы переписи с дельфей на с++ под линухом
    #38570728
sydenis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok, спасибо всем, кто поделился советом - будем пробовать
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / проблемы переписи с дельфей на с++ под линухом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]