Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / проблемы переписи с дельфей на с++ под линухом / 25 сообщений из 26, страница 1 из 2
22.02.2014, 22:41:22
    #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
22.02.2014, 23:03:14
    #38569644
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы переписи с дельфей на с++ под линухом
sydenisГде тут есть ошибки?
Везде. Читай http://ibase.ru/develop.htm#udf
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.02.2014, 23:12:14
    #38569648
sydenis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы переписи с дельфей на с++ под линухом
Dimitry SibiryakovВезде. Читай http://ibase.ru/develop.htm#udf

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

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

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

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

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

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

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

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

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


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