Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.13;
Скачать: CL | DM;

Вниз

UDF Interbase   Найти похожие ветки 

 
Pul   (2004-01-15 13:38) [0]

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


 
Johnmen ©   (2004-01-15 13:41) [1]

Для разных серверов разное расположение длл. Хотя здесь это, скорее всего, непричем...
А сервера разные ?


 
Pul   (2004-01-15 13:47) [2]

>>Johnmen © (15.01.04 13:41) [1]
DLL-ка лежит в обоих случаях в одном и том же месте
Единственное различие, на одном Win2000SP3, на другом Win2000SP4
Может в этом связь?


 
Digitman ©   (2004-01-15 13:48) [3]

комментарий из штатной док-ции к 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.


 
Digitman ©   (2004-01-15 13:51) [4]


> Pul


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

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


 
Vlad ©   (2004-01-15 13:52) [5]


> Pul (15.01.04 13:47) [2]

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

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


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

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


 
Pul   (2004-01-15 14:01) [7]

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


 
Digitman ©   (2004-01-15 14:51) [8]


> Pul


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


 
Desdechado ©   (2004-01-15 15:15) [9]

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


 
Pul   (2004-01-15 15:34) [10]

>>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]
при работе с БД


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

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


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

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


 
kaif ©   (2004-01-16 01:20) [13]

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


 
Digitman ©   (2004-01-16 09:23) [14]

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

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

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

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

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


 
Pul   (2004-01-16 16:11) [15]

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


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

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

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


 
Desdechado ©   (2004-01-16 16:28) [17]

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


 
Pul   (2004-01-16 16:42) [18]

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


 
Pul   (2004-01-16 16:47) [19]

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


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

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


 
Digitman ©   (2004-01-16 18:33) [21]


> Pul


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

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

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

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


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

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


 
Digitman ©   (2004-01-19 13:07) [23]

1. закомментируй на время все ссылки на эту UDF в SP и триггерах, перекомпилируй эти SP/триггеры

2. удали из БД декларацию этой UDF, декларируй ее заново

3. раскомментируй ссылки на UDF в SP и триггерах, , перекомпилируй эти SP/триггеры,

попробуй что получилось


 
Vlad ©   (2004-01-19 13:09) [24]

Между 2 и 3 неплохо бы еще сервер перезапустить


 
Pul   (2004-01-19 13:45) [25]

>> Digitman © (19.01.04 13:07) [23]
Тот же результат.


 
Digitman ©   (2004-01-19 14:08) [26]


> Pul


после первого же отказавшего обращения IB-сервера к UDF DLL любой утилитой просмотри список модулей процесса IB-сервера

если среди них не присутствует модуль твоей UDF DLL, то проблема - в поиске самой DLL IB-сервером, в противном случае - проблема в ненахождении сервером в ней эксп.ид-ра ANKLIKE


 
Pul   (2004-01-19 15:10) [27]

>> Digitman © (19.01.04 14:08) [26]
А чем объяснить тот факт, что стандартные функции нормально работают, а эта - нет, причем лежат эти DLL-ки в одной папке


 
kaif ©   (2004-01-19 15:20) [28]

Проверь, нет ли путаницы русские/английски символы в имени dll. Например, буква "a" может быть русской (чья-то дурацкая шутка). Переименуй вообще эту dll к черту в MMM.DLL и продекларируй такую функцию. Для упрощения экспериментов создай отдельную маленькую базу данных. Без всяких триггеров и процедур.
В любом случае здесь какое-то недоразумение.


 
Digitman ©   (2004-01-19 15:28) [29]


> Pul (19.01.04 15:10) [27]


> А чем объяснить тот факт


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


 
Digitman ©   (2004-01-19 15:33) [30]

к сож., ИБ-сервер (и его клоны) никак не извещают клиента об истинных причинах отказа при попытке задействовать внешнюю ф-цию во внеш.модуле .... "не найдено", мол, и все тут ... проверка зависимостей и путей поиска/загрузки требуемых модулей (пути поиска по умолчанию и пр.) - первое что надо было сделать в этой ситуации ...


 
Digitman ©   (2004-01-19 15:36) [31]

что стоит в USES твоей библ-ки ? перечисли..

еще лучше, если полный текст проекта библ-ки небольшой, привести его сюда


 
kaif ©   (2004-01-19 16:42) [32]

2 Digitman © (19.01.04 15:28) [29]
Но тестовое приложение с динамической загрузкой библиотеки, которое ты предложил, работает, как пишет автор вопроса. Если бы использовались какие-то dll, которых нет, то, ИМХО, тест бы не работал. А автор пишет, что тест работает. Конечно, стоит в любом случае с помощью tdump посмотреть все dll, которые использует эта dll. У меня был случай, когда по этой причине возникала подобная ошибка.


 
Digitman ©   (2004-01-19 16:51) [33]


> kaif © (19.01.04 16:42) [32]


не знаю... автор молчит ... темный лес пока .. с зависимостями


 
Pul   (2004-01-21 14:12) [34]

Извините за дурацкий вопрос, напомните пож. параметры командной строки для tdump


 
Vlad ©   (2004-01-21 14:14) [35]

tdump /?


 
Pul   (2004-01-21 14:22) [36]

>> Vlad © (21.01.04 14:14) [35]
Я имел в виду параметры для просмотра библиотек, подключенных к приложению
(просто у меня необходимость подобной отладки возникала редко и я раньше пользовался другой прогой, дистрибутив которой я никак не могу найти)


 
Vlad ©   (2004-01-21 14:38) [37]


> Pul (21.01.04 14:22) [36]
> Я имел в виду параметры для просмотра библиотек, подключенных
> к приложению


Не поверишь, я имел ввиду тоже самое :-)
Читаем:
Syntax: TDUMP [options] [InputFile] [ListFile] [options]

Библиотеки, требуемые приложением увидишь в разделе Import


 
Pul   (2004-01-21 15:15) [38]

>> Vlad © (21.01.04 14:38) [37]
спасибо, уже нашел.
Только я в указанном разделе не увидел библиотек с подключаемыми функциями, хотя стандартная фукнция ABS из ib_udf в запросах используется и нормально работает.
Это просто список импортируемых из DLL функций, а уж никак не список подключенных в данный момент.


 
Pul   (2004-01-21 15:19) [39]

Vlad © (21.01.04 14:38) [37]
Вот почему я не люблю утилиты с командной строкой


 
Digitman ©   (2004-01-21 16:02) [40]


> Это просто список импортируемых из DLL функций, а уж никак
> не список подключенных в данный момент.


для получения инф-ции о процессах, использующих в дан.момент те или иные модули, можно воспользоваться иными существующими утилитами (просто поищи в сети)

в кр.случае можешь воспользоваться моим кодом
http://delphimaster.net/view/4-1074261583/


> Вот почему я не люблю утилиты с командной строкой


возьми из состава MS VisualStudio GUI-утилиту depends.exe - она работает и без ком.строки, т.к. подобно моему примеру (см.ссылку) встраивается в shell



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

Текущий архив: 2004.02.13;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.036 c
4-39144
Alexey Ponomarev
2003-12-09 17:35
2004.02.13
Как сделать PopUp окно с WinControl-ами которое не отбирает фокус


7-39102
AlexRush
2003-11-29 12:19
2004.02.13
настройки системы - определить LargeFont или SmallFont


7-39116
Mr.Nobody
2003-11-26 14:38
2004.02.13
Как работать с FM-тюнером


6-38993
BOA_KAA
2003-12-08 16:00
2004.02.13
Автоматическая проверка полученной почты


3-38691
Set
2004-01-23 16:37
2004.02.13
Подключить базу, которая на другом компьютере