Главная страница
    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.49 MB
Время: 0.038 c
3-1084862582
Bizquit
2004-05-18 10:43
2004.06.13
Вертикальный ДБ Грид.


8-1080472553
Pa5ha
2004-03-28 15:15
2004.06.13
VertexBuffer в играх.


1-1085688490
SergP
2004-05-28 00:08
2004.06.13
Переопределение деструктора класса.


14-1085504971
Jprs154
2004-05-25 21:09
2004.06.13
Почему в новых домах плохо продаются последние и первые этажи?


4-1084191004
apihelp
2004-05-10 16:10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский