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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.011 c
1-38786
Лысый
2004-02-03 12:34
2004.02.13
QReport


7-39108
Cosinus
2003-11-26 18:42
2004.02.13
Защита от монитора портов


4-39134
vasil
2003-12-09 13:00
2004.02.13
Как на WinAPI заполнить ComboBox


7-39114
Zaratustra
2003-11-27 13:20
2004.02.13
Хук клавиатуры


14-39077
тихий вовочка
2004-01-24 08:12
2004.02.13
Drag and drop





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