работы со строками, числами и датами. Изначально были написаны на Delphi.
MandrivaLinux 2006. Firebird SS 1.5.3
Сейчас скомпилировал на FreePascal под Linux. половина работает половина нет
конечно, самый разумный совет наверно - предложить все переписать на С - но я его подзабыл
Может, есть другой способ решения проблемы?
симптом тех функций которые не работают - соединение повисает полностью.
bg_fixedpoint - вешает
bg_dayofweek - спокойно работает
самое противное - все функции правильные - при запуске в проекте отрабатывают нормально. а при вызове их как UDF - вешают соединение
код библиотечки - слегка покоцаный
lbrary bg_udf;
uses SysUtils;
Код: Выделить всё
function bg_fixedpoint(var a:double;var b:integer):double; cdecl; export;
begin
result:=strtofloat(floattostrf(a,fffixed,20,b));
end;
function bg_dayofweek(var d:tm):integer; cdecl; export;
begin
result:=dayofweek(encodedate(1858,11,17)+d.a+d.b/864000000);
end;
initialization
IsMultiThread:=True
end.
exports
bg_fixedpoint,
bg_dayofweek;
DECLARE EXTERNAL FUNCTION BG_FIXEDPOINT
Double precision, Integer
RETURNS Double precision BY VALUE
ENTRY_POINT 'bg_fixedpoint'
MODULE_NAME 'bg_udf.dll';
DECLARE EXTERNAL FUNCTION BG_DAYOFWEEK
Timestamp
RETURNS Integer BY VALUE
ENTRY_POINT 'bg_dayofweek'
MODULE_NAME 'bg_udf.dll';
module_name - в порядке. компилирую библиотечку libbg_udf.dll.so - Firebird ее цепляет как надо.