powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Возвращение результата BY DESCRIPTOR
41 сообщений из 41, показаны все 2 страниц
Возвращение результата BY DESCRIPTOR
    #39851231
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как из UDF вернуть строку BY DESCRIPTOR? Как выделить память под саму структуру и под данные?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851233
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.08.2019 17:26, _Vasilisk_ пишет:
> Как из UDF вернуть строку BY DESCRIPTOR? Как выделить память под саму структуру и под данные?

дык статья же есть, с примерами
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851237
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийдык статья же есть, с примерами Эта ? Набор функций IFNULL и возвращаются те же параметрі, что были переданы.

Вот пример оттуда
Код: pascal
1.
2.
3.
4.
5.
6.
function idNvl( v,v2:PDSC):PDSC;cdecl; export;
begin
	if not isnull(v) then
		result:= v else
	result:= v2;
end;
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851240
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оттуда же
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure copyparam( v,rc:PDSC);
  begin
       //code provided by Rudy Velthuis (TeamB)
       rc^ := v^;
       //GetMem(rc^.dsc_address, v^.dsc_length);
       Move(v^.dsc_address^, rc.dsc_address^, v^.dsc_length);
  end;
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851245
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851257
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис http://www.ibphoenix.com/files/Writing-External-Functions.pdf Нашел такоеFREE_ITIf the parameter is returned by descriptor, however, we have two elements that were created dynamically: the descriptor and the data. Firebird 1 only freed the data, making it useless for most needs. Firebird 2 deallocates both the descriptor and the dataТеперь бы понять как ведет себя Interbase
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851272
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Нашел такое

И тут же выкинь. С FREE_IT ты вернёшь только строку как значение.

Дескриптор со строкой можно вернуть исключительно через возврат значения во входном
параметре. Ищи недокументированную фичу RETURNS PARAMETER.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851285
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Теперь бы понять как ведет себя InterbaseА что - поддержка не отвечает ? В документации не расжёвано ?
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851315
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovС FREE_IT ты вернёшь только строку как значение.Я думал вызвать дважды ib_malloc. Один раз для структуры, второй раз для данных.

Но сейчас увидел, что BY DESCRIPTOR вернуть результат нельзя. Значит вопрос с выделением памяти под структуру решился. Будем надеяться (сейчас буду проверять), что FREE_IT освободит память под данные
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851316
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВ документации не расжёвано ?Нет. Там две странички на все
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851339
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Объявляю функцию
Код: sql
1.
2.
3.
4.
5.
DECLARE EXTERNAL FUNCTION UR_TEST
    DESCRIPTOR,
    DESCRIPTOR
RETURNS PARAMETER 2
ENTRY_POINT 'Test' MODULE_NAME 'Test.dll';


Реализация
Код: pascal
1.
2.
3.
4.
5.
procedure Test(AParam: PISC_DSC; ARes: PISC_DSC); cdecl;
begin
  WriteToLogFmt('Param: %p', [AParam]);
  WriteToLogFmt('Res  : %p', [ARes]);
end;

Вызываю
Код: sql
1.
SELECT ur_test('ABC') FROM rdb$database;


Видим в логе, что AParam = ARes, dsc_dtype = 9 (dtype_long), PLong(dsc_address)^ = 0

ЧЯДНТ?
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851346
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И при вызове еще и ошибка
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. message length error (encountered 16, expected 20).Вызов
Код: sql
1.
SELECT ur_test(99) FROM rdb$database;

дает тот же эффект
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851357
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ЧЯДНТ?Проверял на IB2009. Посмотрел на IB XE3 x64 - адреса передаются разные и входной параметр корректен.

А FREE_IT с конструкцией
Код: sql
1.
RETURNS PARAMETER 2

объявить не разрешает.

При таком объявлении
Код: sql
1.
2.
3.
4.
5.
declare external function UR_TEST
descriptor,
CSTRING(1024) BY DESCRIPTOR
RETURNS PARAMETER 2
entry_point 'Test' module_name 'Test.dll';

Token unknown - line 3, char 13. BY.
Если объявить так
Код: sql
1.
2.
3.
4.
5.
declare external function UR_TEST
descriptor,
DESCRIPTOR
RETURNS PARAMETER 2
entry_point 'Test' module_name 'Test.dll';

то второй параметр приходит с типом dtype_long и dsc_length = 4
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851363
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

И что, есть действительно серьезные основания пытаться прошибать лбом стены именно на IB?
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851365
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А FREE_IT с конструкцией
RETURNS PARAMETER 2
объявить не разрешает.
что за ересь - free_it только для возвращаемых значений, где память аллокирована внутри udf через ib_util_malloc.
returns parameter означает вернуть ссылку на входной параметр. Входные параметры всегда аллокируются ИБ ФБ самостоятельно, ДО вызова udf. Поэтому free_it тут вообще не аллё.

p.s. в ИБ периодически что-то ломают. например, давно поломали вывод page reads/writes для isc_database_info. В результате, например, ИБЕ после выполнения запроса для reads/writes/fetches выводит какую-то ахинею.
Правда, может там что поменяли, о чем ИБЕ не знает, но...
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851370
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv В результате, например, ИБЕ после выполнения запроса для reads/writes/fetches выводит какую-то ахинею.

это случается и для Firebird. Правда не понятно при каких условиях
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851373
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто для FB нынче есть куда как более интересные альтернативы.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851642
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FИ что, есть действительно серьезные основания пытаться прошибать лбом стены именно на IB?Заказчик. На FB не хочет переходить принципиально
kdvчто за ересь - free_it только для возвращаемых значений,Исходный вопрос был - как возвратить строку? Как под нее выделить память и кто ее должен освободить
kdvВходные параметры всегда аллокируются ИБ ФБ самостоятельноЭто замечательно. А память под данные?

Сейчас попробовал такой вызов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE SP_D_TEST (
  in_param VARCHAR(64))
RETURNS (
  out_param VARCHAR(64))
AS
BEGIN
  out_param = ur_test(:in_param);
END

все равно выходной параметр dtype_long и длина 4 байта
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851645
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Исходный вопрос был - как возвратить строку?

Строку вернуть просто. Вернуть её BY DESCRIPTOR - совсем другой вопрос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851657
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСтроку вернуть просто.Отож. Мне нужно вернуть или строку или NULL. Из-за этого и возня
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851659
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.08.2019 15:04, _Vasilisk_ пишет:
> Отож. Мне нужно вернуть или строку или NULL. Из-за этого и возня

а обернуть в NULLIF(UDF_str(), '') ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851665
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа обернуть в NULLIF(UDF_str(), '') ?Хотелось по людски сделать.

Сейчас еще проверю на XE7, а потом забью
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851675
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Сейчас еще проверю на XE7,Не взлетело. То же, что и на XE3
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851681
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.08.2019 15:19, _Vasilisk_ пишет:
> Не взлетело. То же, что и на XE3

возьми попробуй пример из fdudf, что идёт в комплекте с FB.
каталог examples, функции sNvl, sNullif и т.п.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851682
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвозьми попробуй пример из fdudf, что идёт в комплекте с FB.
каталог examples, функции sNvl, sNullif и т.п.Я же уже отвечал 21952721
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851688
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо таки нужно писать в саппорт.
х.з. какие неонки у них там погорели...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851693
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвидимо таки нужно писать в саппорт.Мне тебе рассказать про багтреккинг Эмбаркадеры?
Мимопроходящийх.з. какие неонки у них там погорели...Я перепробовал три последних версии. Похоже, что неонки никогда и не работали
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851700
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.08.2019 15:47, _Vasilisk_ пишет:
> Я перепробовал три последних версии. Похоже, что неонки никогда и не работали

вообще-то фича FB-шная.
можно копнуть поглубже.
если в IB6.5 не фурычит,
то наверное напрасны ожидания.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851702
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

https://quality.embarcadero.com/browse/IBP-34
https://quality.embarcadero.com/browse/IBP-37
https://quality.embarcadero.com/browse/IBP-35

три шоу-стоппера ХЕ7, update 6. Какой-то из них "не могли воспроизвести", хотя я воспроизвел без проблем на 4х разных компах.
В итоге ... выпустили IB 2017, а апдейтов к XE7 больше не выходило.
А это значит, что "клиент должен сделать апгрейд (платный) до 2017, надеясь, что эти ошибки исправлены там".
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851704
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвообще-то фича FB-шная. Вот ее описание в IB

А вот пример декларации
Код: sql
1.
2.
3.
4.
5.
6.
DECLARE EXTERNAL FUNCTION name [data_type ;
| CSTRING (int) | DESCRIPTOR [, data_type | CSTRING (int) ...] DESCRIPTOR]
RETURNS {data_type [BY VALUE] | CSTRING (int) | PARAMETER n}
[FREE_IT]
ENTRY_POINT 'entryname'
MODULE_NAME 'modulename';

Как видишь, синтаксис немного отличается от FB-шного
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851707
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.08.2019 15:59, _Vasilisk_ пишет:
> Как видишь, синтаксис немного отличается от FB-шного

ну, пощупай на ихнем 2017-м, как говорит kdv
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851712
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk__Vasilisk_Сейчас еще проверю на XE7,Не взлетело. То же, что и на XE3Ошибся. Проверял на 2017 (WI-V13.3.0.328)
Итого:
2009: адреса входного и выходного параметров совпадают. Получить значение входного параметра невозможно
XE3, 2017 - адреса разные и входной параметр приходит, но выходной имеет тип long с выделенными 4 байтами
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851720
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

жаль, что я ту базу test2.ib кокнул на ЯД осенью 2018 года. А на дисках не могу найти.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851738
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

нашел! Надо кому? Выложу на ЯД опять.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851742
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20.08.2019 16:29, kdv пишет:
> нашел! Надо кому? Выложу на ЯД опять.

дык, это ж твой файл.
откуда ж нам знать что там?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851753
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Как видишь, синтаксис немного отличается от FB-шного

Ну так чего ж ты в 21952909 удивляешься, что она ругается на FB-шный синтаксис?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851762
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНу так чего ж ты в 21952909 удивляешься, что она ругается на FB-шный синтаксис?..Потому что на тот момент еще не рассмотрел отличий. Был не прав.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851800
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

там файл для воспроизведения багов ИБ ХЕ7, в соответствии с моими багрепортами.
Не надо - не выложу.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851811
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv https://quality.embarcadero.com/browse/IBP-34 Похоже? https://quality.embarcadero.com/browse/IBP-80 internal gds software consistency check (inconsistent LATCH_mark call (295), file: cch.c line: 7070)Это я репортил уже на 2017
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39851842
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

да этот LATCH у них лез уже давно, я так и не знаю, вывели или нет.
...
Рейтинг: 0 / 0
Возвращение результата BY DESCRIPTOR
    #39852166
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvя так и не знаю, вывели или нет.Мой баг повторяется на WI-V13.3.0.328. Это 2017 Update 3. Последняя вышедшея версия.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Возвращение результата BY DESCRIPTOR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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