![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UDF Interbase [D7, IB6.x]
Pul © (2004-01-15 13:38:00)
Подскажите пожалуйста, с какими настройками винды или с чем еще может быть связана следующая ошибка. Не найдена точка входа в UDF функцию. Причем на одном сервере работает без проблем, на другом не хочет. DLL-ка лежит в обоих случаях в одном и том же месте, декларация в базе есть, регистр в названиях одинаков. Ни с чем больше, кроме каких-то настроек винды или interbase сервера я связи не вижу. Используется Interbase Firebird.
kaif (2004-01-22 14:02:00) [1]
2 Pul (22.01.04 12:57) [41]
А как проверить зависимость моей dll-ки от других?
Ну так tdump для этого и предлагалось использовать. С помощью tdump (или аналогичных утилит) можно увидеть, какие dll импортируются твоей dll и требуются при ее запуске. Правда, так не увидишь динамически подгружаемые dll, но этого может и не понадобится. С очень большой вероятностью твоя dll что-то использует, чего на компе просто нет.
Ты тест-то попробовал написать и запустить (загрузка dll и вызов функции из нее)?
Digitman © (16.01.04 18:33) [21]
Тест многое покажет.
Pul (2004-01-22 12:57:00) [2]
>>Digitman © (21.01.04 16:02) [40]
Утилиту нашел, и выяснилось, что в списке используемых модулей моей DLL-ки нет, а стандартная ib_udf.dll - есть.
Фантастика, значит это сервер не может найти файл, но он же лежит в той же папке, что и ib_udf.dll.
А как проверить зависимость моей dll-ки от других?
Digitman (2004-01-21 16:02:00) [3]
> Это просто список импортируемых из DLL функций, а уж никак
> не список подключенных в данный момент.
для получения инф-ции о процессах, использующих в дан.момент те или иные модули, можно воспользоваться иными существующими утилитами (просто поищи в сети)
в кр.случае можешь воспользоваться моим кодом
http://delphimaster.ru/cgi-bin/forum.pl?id=1074261583&n=5
> Вот почему я не люблю утилиты с командной строкой
возьми из состава MS VisualStudio GUI-утилиту depends.exe - она работает и без ком.строки, т.к. подобно моему примеру (см.ссылку) встраивается в shell
Pul (2004-01-21 15:19:00) [4]
Vlad © (21.01.04 14:38) [37]
Вот почему я не люблю утилиты с командной строкой
Pul (2004-01-21 15:15:00) [5]
>> Vlad © (21.01.04 14:38) [37]
спасибо, уже нашел.
Только я в указанном разделе не увидел библиотек с подключаемыми функциями, хотя стандартная фукнция ABS из ib_udf в запросах используется и нормально работает.
Это просто список импортируемых из DLL функций, а уж никак не список подключенных в данный момент.
Vlad (2004-01-21 14:38:00) [6]
> Pul (21.01.04 14:22) [36]
> Я имел в виду параметры для просмотра библиотек, подключенных
> к приложению
Не поверишь, я имел ввиду тоже самое :-)
Читаем:
Syntax: TDUMP [options] [InputFile] [ListFile] [options]
Библиотеки, требуемые приложением увидишь в разделе Import
Pul (2004-01-21 14:22:00) [7]
>> Vlad © (21.01.04 14:14) [35]
Я имел в виду параметры для просмотра библиотек, подключенных к приложению
(просто у меня необходимость подобной отладки возникала редко и я раньше пользовался другой прогой, дистрибутив которой я никак не могу найти)
Vlad (2004-01-21 14:14:00) [8]
tdump /?
Pul (2004-01-21 14:12:00) [9]
Извините за дурацкий вопрос, напомните пож. параметры командной строки для tdump
Digitman (2004-01-19 16:51:00) [10]
> kaif © (19.01.04 16:42) [32]
не знаю... автор молчит ... темный лес пока .. с зависимостями
kaif (2004-01-19 16:42:00) [11]
2 Digitman © (19.01.04 15:28) [29]
Но тестовое приложение с динамической загрузкой библиотеки, которое ты предложил, работает, как пишет автор вопроса. Если бы использовались какие-то dll, которых нет, то, ИМХО, тест бы не работал. А автор пишет, что тест работает. Конечно, стоит в любом случае с помощью tdump посмотреть все dll, которые использует эта dll. У меня был случай, когда по этой причине возникала подобная ошибка.
Digitman (2004-01-19 15:36:00) [12]
что стоит в USES твоей библ-ки ? перечисли..
еще лучше, если полный текст проекта библ-ки небольшой, привести его сюда
Digitman (2004-01-19 15:33:00) [13]
к сож., ИБ-сервер (и его клоны) никак не извещают клиента об истинных причинах отказа при попытке задействовать внешнюю ф-цию во внеш.модуле .... "не найдено", мол, и все тут ... проверка зависимостей и путей поиска/загрузки требуемых модулей (пути поиска по умолчанию и пр.) - первое что надо было сделать в этой ситуации ...
Digitman (2004-01-19 15:28:00) [14]
> Pul (19.01.04 15:10) [27]
> А чем объяснить тот факт
есть еще одно страшное подозрение : твоя библ-ка находится сервером, но при попытке ее загрузки происходит отказ из-за отсутствия на машине неких библиотек, от которых зависит работа твоей библ-ки .. проверяй и разрешай все необходимые зависимости ... возможно твоя библ-ка требует наличия bpl-модулей, которых попросту и в помине нет на проблемной машине
kaif (2004-01-19 15:20:00) [15]
Проверь, нет ли путаницы русские/английски символы в имени dll. Например, буква "a" может быть русской (чья-то дурацкая шутка). Переименуй вообще эту dll к черту в MMM.DLL и продекларируй такую функцию. Для упрощения экспериментов создай отдельную маленькую базу данных. Без всяких триггеров и процедур.
В любом случае здесь какое-то недоразумение.
Pul (2004-01-19 15:10:00) [16]
>> Digitman © (19.01.04 14:08) [26]
А чем объяснить тот факт, что стандартные функции нормально работают, а эта - нет, причем лежат эти DLL-ки в одной папке
Digitman (2004-01-19 14:08:00) [17]
> Pul
после первого же отказавшего обращения IB-сервера к UDF DLL любой утилитой просмотри список модулей процесса IB-сервера
если среди них не присутствует модуль твоей UDF DLL, то проблема - в поиске самой DLL IB-сервером, в противном случае - проблема в ненахождении сервером в ней эксп.ид-ра ANKLIKE
Pul (2004-01-19 13:45:00) [18]
>> Digitman © (19.01.04 13:07) [23]
Тот же результат.
Vlad (2004-01-19 13:09:00) [19]
Между 2 и 3 неплохо бы еще сервер перезапустить
Digitman (2004-01-19 13:07:00) [20]
1. закомментируй на время все ссылки на эту UDF в SP и триггерах, перекомпилируй эти SP/триггеры
2. удали из БД декларацию этой UDF, декларируй ее заново
3. раскомментируй ссылки на UDF в SP и триггерах, , перекомпилируй эти SP/триггеры,
попробуй что получилось