Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Проблема с UDF   Найти похожие ветки 

 
sashag   (2004-05-20 17:15) [0]

При вызове функции UDF на машине, где написана DLL, никаких проблем не наблюдается, но как только ставлю базу и DLL на машину, где это все должно работать - тут же при вызове функции возникает ошибка:

Invalid request BLR at offset 1338 function GET_DATE is not defined module name or entrypoint could not be found

Возможно-ли это излечить?

function get_date(var PDate: TIBDateTime): PChar; cdecl; export;
var _PDate: TDate;
begin
 with PDate do _PDate := Days - IBDateDelta + MSec10 / MSecsPerDay10;
 Result:= PChar(FormatDate("dd.mm.yyyy", _PDate));
end;


exports
 GET_DATE name "DATE";


DECLARE EXTERNAL FUNCTION GET_DATE
   DATE
RETURNS CSTRING(32765) FREE_IT
ENTRY_POINT "DATE" MODULE_NAME "rp_bill"


 
Соловьев ©   (2004-05-20 17:18) [1]


> RETURNS CSTRING(32765) FREE_IT

FREE_IT - убрать. Это если ты сам выделяешь память.


 
Соловьев ©   (2004-05-20 17:20) [2]


> RETURNS CSTRING(32765) FREE_IT

32765 - єто зачем же скоко???
Типа - Дата от рождества христова , когда умер тот-то и родился тот-то??? :)


 
sashag   (2004-05-20 17:22) [3]

Руководствовался документом http://www.ibase.ru/devinfo/udf_ok.htm

Убрал FREE_IT - проблема осталась


 
Соловьев ©   (2004-05-20 17:25) [4]


> GET_DATE name "DATE";

а зачем так? я всегда пишу имя функции...


> но как только ставлю базу и DLL на машину

надеюсь в папку UDF сервака? и сервер перезапустил?


 
sashag   (2004-05-20 17:28) [5]

Писал и имя функции - не помогло.
DLL поставил в папку Firebird1.5\udf


 
jack128 ©   (2004-05-20 17:30) [6]


> FREE_IT - убрать. Это если ты сам выделяешь память.
не-а.

С памятью в UDF в корни не правильно работаешь.
экспортируй из ib_util.dll ib_util_malloc и выделяй память под результат с помощью этой функции. free_it нужно оставить иначе будет утечка памяти. Помоему на ibase.ru была статья проо написание udf - внимательно её перечитай..


 
Соловьев ©   (2004-05-20 17:31) [7]

сервер перезапустил?


> ENTRY_POINT "DATE" MODULE_NAME "rp_bill"

ENTRY_POINT "DATE" MODULE_NAME "rp_bill.dll"


 
sashag   (2004-05-20 17:34) [8]

Сервер перезапустил, указал MODULE_NAME "rp_bill.dll"
- все равно не работает


 
jack128 ©   (2004-05-20 17:42) [9]

кстати, если точка в формате это именно точка, а не разделитель частей даты в системе, то тоже самое можно написать используя sql ;-)


 
sashag   (2004-05-20 17:44) [10]

Точка - разделитель даты в системе.
В этой DLL несколько функций, и аналогичная проблема при вызове любой из них


 
Соловьев ©   (2004-05-20 17:44) [11]

И вообще, такие вещи, ИМХО, надо делать на клиенте. Нехрен нагружать сервак чем не попадя.


 
sashag   (2004-05-20 17:49) [12]

> И вообще, такие вещи, ИМХО, надо делать на клиенте. Нехрен нагружать сервак чем не попадя.

Функции используются в хранимых процедурах

Но проблему это не решает, не так-ли?


 
Соловьев ©   (2004-05-20 17:53) [13]


>  [12] sashag   (20.05.04 17:49)

[9] от себя намекну - см. extract


 
sashag   (2004-05-20 18:01) [14]

Аналогичная ошибка:

function get_namemonth(var PDate: TIBDateTime): PChar; cdecl; export;
var _PDate: TDate;
   Y, M, D: Word;
begin
 with PDate do _PDate := Days - IBDateDelta + MSec10 / MSecsPerDay10;
 DecodeDate(_PDate, Y, M, D);
 case M of
    1: Result:= PChar("Січень " + IntToStr(Y) + " р.");
    2: Result:= PChar("Лютий " + IntToStr(Y) + " р.");
    3: Result:= PChar("Березень " + IntToStr(Y) + " р.");
    4: Result:= PChar("Квітень " + IntToStr(Y) + " р.");
    5: Result:= PChar("Травень " + IntToStr(Y) + " р.");
    6: Result:= PChar("Червень " + IntToStr(Y) + " р.");
    7: Result:= PChar("Липень " + IntToStr(Y) + " р.");
    8: Result:= PChar("Серпень " + IntToStr(Y) + " р.");
    9: Result:= PChar("Вересень " + IntToStr(Y) + " р.");
   10: Result:= PChar("Жовтень " + IntToStr(Y) + " р.");
   11: Result:= PChar("Листопад " + IntToStr(Y) + " р.");
   12: Result:= PChar("Грудень " + IntToStr(Y) + " р.");
 else
   Result:= PChar("ERROR NAME MONTH");
 end;
end;


exports
 GET_NAMEMONTH name "NMONTH";


DECLARE EXTERNAL FUNCTION GET_NAMEMONTH
   DATE
RETURNS CSTRING(250) FREE_IT
ENTRY_POINT "NMONTH" MODULE_NAME "rp_bill.dll"


 
Desdechado ©   (2004-05-21 15:53) [15]

судя по ошибке, не находит длл
попробуй подкинуть ее в систтемный каталог для эксперимента

а по поводу выделения памяти - дельное замечание. в [14] у тя борландовский менеджер памяти выделяет, а освобождение осуществляется сервером, а у него менеджер от мелкомягких - они несовместимы. Гарантированы утечки, возможен падеж сервера


 
inic ©   (2004-05-24 14:26) [16]

Такая же тема у меня была!!!
Но дело в том, что вот этот самый export в конце объявления
функции не х..я уже не значит (начиная с какой-то версии Дельфи) - в справке кстати это написано.
Т.е. функция эта компилируется не как экспортная, а как простая.
Нужно использовать exports - см. справку.


 
inic ©   (2004-05-24 14:28) [17]

Хотя извиняюсь, проблема то у тебя не в этом :(



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.03 c
3-1085332333
VflowerW
2004-05-23 21:12
2004.06.13
Rave Reports в приложениях


14-1085625314
Думкин
2004-05-27 06:35
2004.06.13
С днем рождения! 27 мая


1-1085726881
errorr
2004-05-28 10:48
2004.06.13
Галочки в stringgrid


8-1080807007
Videobaton
2004-04-01 12:10
2004.06.13
Работа с видеокртой


3-1084660424
Shade_
2004-05-16 02:33
2004.06.13
Хранение дерева данных в базе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский