Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при использовании UDF [D7, FireBird 1.5]


Павел ©   (2005-10-15 18:52:00) 

вот такая библиотека:
library lib;
uses
 SysUtils,Classes;

function GetServDate():integer;
begin
 result:=trunc(date);
end;

exports GetServDate;
begin
end.

Вот так подключаю:
DECLARE EXTERNAL FUNCTION SERVDATE
RETURNS INTEGER BY VALUE
ENTRY_POINT 'GetServDate' MODULE_NAME 'D:\Base\lib.dll'

далее так вызываю:

.....
d1=servdate();
.....
при попытке использовать таким образом появляется соообщение об ошибке:
Invalid token.
invalid request BLR at offset 233.
function SERVDATE is not defined.
module name or entrypoint could not be found.

в чем дело?


DrPass   (2005-10-16 23:59:00) [1]


>
> isasa ©   (16.10.05 11:31) [12]
> А что, в Firebird все вызовы cdecl?

Ага


isasa   (2005-10-16 11:31:00) [2]

DrPass ©   (16.10.05 01:28) [11]
А что, в Firebird все вызовы cdecl?
Стандартное соглашение в Win32 - stdcall.

Павел ©   (15.10.05 18:52)
В общем случае см. документацию по Firebird.


DrPass   (2005-10-16 01:28:00) [3]


> Что-бы не нарваться далее на грабли, точку входа опиши
> function GetServDate():integer; stdcall;

function GetServDate():integer; cdecl;
Это же не WinAPI


isasa   (2005-10-15 22:35:00) [4]

Что-бы не нарваться далее на грабли, точку входа опиши
function GetServDate():integer; stdcall;


Desdechado   (2005-10-15 21:37:00) [5]

на ibase.ru усть статьи, примеры и готовые библиотеки


Павел   (2005-10-15 21:29:00) [6]

ладно, допустим, но проблему то всеравно надо решить, мне не только такая UDF нужна будет :)


Desdechado   (2005-10-15 21:11:00) [7]

а что, трудно вычесть из текущей даты твое начало отсчета? вот и будет число дней
на чистом SQL можно


Павел   (2005-10-15 21:07:00) [8]

а что за функция extract?


Павел   (2005-10-15 21:02:00) [9]

численное значение, это аналог типа datetime в Delphi, т.е. дата это число дней, прошедших с какого то дня(че то типа 1 января 1900 года) по день этой даты :)


Desdechado   (2005-10-15 20:57:00) [10]

если положил в Firebird\UDF, переопредели функцию в БД, убрав старый путь
численного - это что такое?
попробуй функцию EXTRACT


Павел   (2005-10-15 20:52:00) [11]

я пробовал ложить в папку файрбёрд\удф - не помогает

а способ такой потомучто нет другого для получения численного значения даты...я по крайней мере не знаю как еще можно :)


Desdechado   (2005-10-15 20:45:00) [12]

видимо, указанный путь к DLL не является путем, где сервер его ищет
я бы писал просто имя библиотеки, даже без расширения, а саму DLL положи в подкаталог Firebird\UDF

кстати, зачем получать время сервера таким ужасным методом, для этого есть 'now', CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP


Павел   (2005-10-15 19:56:00) [13]

неужели никто не подскажет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо