Ситуация следующая: есть ХП
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 и первые шаги делаю на простых примерах. Вот на первом-же шаге уперся лбом в проблему - не могу даже вернуть в процедуру начальный параметр. Подскажите, что я делаю не так.
Не могу передать параметр в UDF
Модератор: kdv
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Дык там на С++, а я и с Delphi-то не разобрался ещё как следует За совет спасибо, коротко и внятно и все заработало. Для таких же спецов как я добавлю - при использовании X:PDouble, вместо строки Result:=X, нужно писать Result:=X^;Dimitry Sibiryakov писал(а):Ну а посмотреть как это сделано в той же rfunc не судьба?
статья и "ссылочки" - на сайте WWW.IBASE.RU
в Download - целый раздел по udf с тучей примеров. Или ты как на сайт зашел, сразу сиганул на форум вопросы задавать?
в Download - целый раздел по udf с тучей примеров. Или ты как на сайт зашел, сразу сиганул на форум вопросы задавать?