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

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

UDF Interbase [D7, IB6.x]


Страницы:   1 2 3

Pul ©   (2004-01-15 13:38:00) 

Подскажите пожалуйста, с какими настройками винды или с чем еще может быть связана следующая ошибка. Не найдена точка входа в UDF функцию. Причем на одном сервере работает без проблем, на другом не хочет. DLL-ка лежит в обоих случаях в одном и том же месте, декларация в базе есть, регистр в названиях одинаков. Ни с чем больше, кроме каких-то настроек винды или interbase сервера я связи не вижу. Используется Interbase Firebird.


Pul   (2004-01-19 12:54:00) [21]

>> Digitman © (16.01.04 18:33) [21]
Данный тестовый пример работает


Digitman   (2004-01-16 18:33:00) [22]


> Pul


хорошо.
сэмулируй ситуацию с загрузкой UDF в тестовом приложении :

hUDF := LoadLibrary("c:\Interbase\UDF\ankudf.dll
");
Win32Check(hUDF <> 0);

pFunc := GetProcAddress(hUDF, "ANKLIKE");
Win32Check(Assigned(pFunc));

о результатах извести


Pul   (2004-01-16 18:12:00) [23]

ЭЭЭЭ----ЙЙЙЙ!!!!


Pul   (2004-01-16 16:47:00) [24]

>> kaif © (16.01.04 01:20) [13]
стандартные функции из джентльменского набора работают


Pul   (2004-01-16 16:42:00) [25]

>> Desdechado © (16.01.04 16:28) [17]
не помогает


Desdechado   (2004-01-16 16:28:00) [26]

попробуй в декларации UDF сделать
MODULE_NAME "ankudf"
вместо
MODULE_NAME "ankudf.dll"


Pul   (2004-01-16 16:17:00) [27]

>> kaif © (16.01.04 01:20) [13]
Функция действительно в dll в верхнем регистре названа!
Весь прикол в том, что на одном сервере работает без проблем, на другом не хочет. DLL лежит в \udf.

>> Digitman © (16.01.04 09:23) [14]
>> попробуй перенести на время DLL в ($WINDOWS)\System32
Уже пробовал, один и тот же результат.


Pul   (2004-01-16 16:11:00) [28]

>> Desdechado © (15.01.04 17:12) [12]
Она там всего одна


Digitman   (2004-01-16 09:23:00) [29]

если в UDF DLL соотв.ф-ция объявлена и экспортируется как

function ANKLIKE(Blob: PBlob; Str: PChar; var Dbl: Double): Integer; cdecl;

то при приведенном тобой ISQL-скрипте проблем с поиском ф-ции по эксп.имени быть не должно - и там и там имя ф-ции фигурирует в верхнем регистре

остается одно - сама DLL по какой-то причине не находится сервером

попробуй перенести на время DLL в ($WINDOWS)\System32


kaif   (2004-01-16 01:20:00) [30]

ENTRY_POINT "ANKLIKE"
Функция действительно в dll в верхнем регистре названа? Функции чувствительны к таким вещам.
А где она все же лежит? В \udf или в этой самой
EXTERNAL_FUNCTION_DIRECTORY ?
Попробуй объявить декларацию какой-нибудь стандартной функции из джентльменского набора в ib_udf.sql. Посмотри, ее тоже не удается вызвать?


Desdechado   (2004-01-15 17:12:00) [31]

а другие UDF из этой DLL работают?


Pul   (2004-01-15 16:33:00) [32]

ЭЙ!!! ОТЗОВИТЕСЬ!


Pul   (2004-01-15 15:34:00) [33]

>>Digitman © (15.01.04 14:51) [8]
декларация проблемной UDF
DECLARE EXTERNAL FUNCTION ANKLIKE
BLOB,
CSTRING (32000),
FLOAT
RETURNS INTEGER BY VALUE
ENTRY_POINT "ANKLIKE" MODULE_NAME "ankudf.dll";
>>Desdechado © (15.01.04 15:15) [9]
при работе с БД


Desdechado   (2004-01-15 15:15:00) [34]

ошибку выдает при restore или уже при работе с БД (запросы)?


Digitman   (2004-01-15 14:51:00) [35]


> Pul


ты все-таки разыщи ориг.скрипт и приведи сюда точный фрагмент декларации проблемной UDF...


Pul   (2004-01-15 14:01:00) [36]

>>Vlad © (15.01.04 13:52) [5]
Win2000 русский, но дело в том, что на 3-м сервиспаке работает, а на 4-м нет.
А EXTERNAL_FUNCTION_DIRECTORY установлен правильно.
Кстати, а резделителем между названием и значением параметра в IBCONFIG может быть как пробел, так и табуляция?


Pul   (2004-01-15 13:57:00) [37]

>> Digitman © (15.01.04 13:51) [4]
Эту цитату я уже читал.
Я не использую скрипт для генерации GDB-файла, а просто делаю backup/restore одной и той же базы на обоих машинах.
При создании скрипта использовал
IBExpert или EMS QuickDesk, я уже не помню.


Vlad   (2004-01-15 13:52:00) [38]


> Pul (15.01.04 13:47) [2]

Если Windows2000 русский, то ни в коем случае не ставь 3-й сервиспак. Он причина многих бед.

У тебя вот это соблюдается ?
В Interbase 6 или Firebird библиотеки пользовательских функций (UDF) должны быть помещены в каталог UDF, или в каталог, определенный в файле конфигурации IBCONFIG (или isc_config на Unix) параметром EXTERNAL_FUNCTION_DIRECTORY. Это сделано по соображениям безопасности.


Digitman   (2004-01-15 13:51:00) [39]


> Pul


DDL-скрипт при генерации GDB-файла один и тот же во всех случаях используется ? тот что единожды был создан ? или иначе ?

IBExpert фигурировал при создании скрипта ?


Digitman   (2004-01-15 13:48:00) [40]

комментарий из штатной док-ции к IB6

LANGUAGE REFERENCE 189
Beginning with InterBase 6, the rules for placing a library module have changed. It must meet one of the following criteria:
· It is located in ib_install_dir/UDF
· The complete pathname to the directory, including a drive letter in the case of a
Windows server, is listed in the InterBase configuration file.
Note that it is no longer sufficient to state a complete path name to the module in DECLARE
EXTERNAL FUNCTION. These changes have been implemented for security reasons.


Страницы:   1 2 3

Наверх

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