Страница 1 из 1

Не могу передать параметр в UDF

Добавлено: 21 дек 2005, 13:01
KVas
Ситуация следующая: есть ХП

CREATE PROCEDURE CALCS1
RETURNS ( RES NUMERIC(15,2))
AS
DECLARE VARIABLE TMP_REAL DOUBLE PRECISION;
begin
tmp_real=1.256; /*тут будет результат вычисленя*/
res=R2(tmp_real); /*R2-округляет до двух знаков после запятой*/
suspend;
END

и есть UDF

function R2(X:Double):Double;cdecl;export;
begin
// тут будет что-то вычисляться и округляться
// пока только возвращаю значение входного параметра
result:=X;
end;

ХП объявлена как

DECLARE EXTERNAL FUNCTION R2
DOUBLE PRECISION
RETURNS DOUBLE PRECISION FREE_IT
ENTRY_POINT 'R2' MODULE_NAME 'udf_ib';

сервер Firebird 1.5.2, база имеет Dialect 1.

При выполнении процедуры в IBExpert'e переменная RES получает значение NULL. Если в R2 строку result:=X; заменить на result:=11.266; получаю 0. Round из rfunc.dll работает чудесно, но моя цель научиться писать свои UDF и первые шаги делаю на простых примерах. Вот на первом-же шаге уперся лбом в проблему - не могу даже вернуть в процедуру начальный параметр. Подскажите, что я делаю не так.

Добавлено: 21 дек 2005, 13:56
Dimitry Sibiryakov
Ну а посмотреть как это сделано в той же rfunc не судьба?
Во-первых, function R2(X:PDouble):Double;cdecl;export;
Во-вторых, RETURNS DOUBLE PRECISION BY_VALUE

Добавлено: 22 дек 2005, 10:02
KVas
Dimitry Sibiryakov писал(а):Ну а посмотреть как это сделано в той же rfunc не судьба?
Дык там на С++, а я и с Delphi-то не разобрался ещё как следует :oops: За совет спасибо, коротко и внятно и все заработало. Для таких же спецов как я добавлю - при использовании X:PDouble, вместо строки Result:=X, нужно писать Result:=X^; :D

Добавлено: 22 дек 2005, 10:10
kdv
я добавлю, что Result:=X^ - это суперизврат. И специально для спецов рекомендую смотреть примеры на сайте и статью Кукарцева по написанию UDF.

Добавлено: 22 дек 2005, 17:23
KVas
kdv писал(а):...специально для спецов рекомендую смотреть примеры на сайте и статью Кукарцева по написанию UDF.
Буду очень признателен за ссылочку и на статью и на примеры :roll:

Добавлено: 22 дек 2005, 17:33
kdv
статья и "ссылочки" - на сайте WWW.IBASE.RU
в Download - целый раздел по udf с тучей примеров. Или ты как на сайт зашел, сразу сиганул на форум вопросы задавать? :)