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

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

вызовDelphi-DLL из VB - File not found? [D5, NT4, Win2k, WinXP]


Akni ©   (2006-12-22 11:34:00) 

Добрый день всем.

Ситуация такая:
Есть DLL на Delphi (не ActiveX) , вызываемая из VB. Периодически в DLL и в  основную программу на  VB  вносятся изменения, все компилируется заново и работает дальше.

После последнего Update’а на НЕКОТОРЫХ (не на всех!) компьютерах в системе при попытке вызвать ф-ции из DLL выдается сообщение «Run-time error 53. File not found xprint». DLL лежит там же, где и EXE, в конфигурации ничего не меняли.
Подскажите, пожалуйста, в чем может быть причина. Где искать – в DLL или в VB?


tesseract   (2006-12-22 16:59:00) [1]

гм а попробуй DLL с полным маршрутом указать. Может рабочая папка в настоящий момент другая и VB DLL не видит.


Сергей М.   (2006-12-22 14:40:00) [2]


> никакого мало-мальски приличного отладчика у нас нет


Скачай OllyDbg, он небольшой и не требует инсталляции


Akni   (2006-12-22 14:30:00) [3]

спасибо еще раз. это оказался VB. будем искать дальше. вот только никакого мало-мальски приличного отладчика у нас нет


Сергей М.   (2006-12-22 14:05:00) [4]


> как проверить, что вернула LoadLibrary и где этот вызов
> отследить?


Сделай в Делфи тестовое приложение. Брось на форму кнопку, в OnClick напиши

Win32Check(LoadLibrary('xprint.dll'))

Положи исп.файл приложения в тот же каталог, где размещен исп.файл VB-приложения, запусти, нажми кнопку.

Если не увидишь окна с ошибкой, значит иниц-ция успешно выполнена и врет то самое VB-приложение


umbra   (2006-12-22 13:55:00) [5]

> как проверить, что вернула LoadLibrary и где этот вызов
> отследить?

импортируйте ее в ВБ проект и смотрите на здоровье


Akni   (2006-12-22 13:48:00) [6]

спасибо.
мне кажется, что дело скорее всего в dll. тогда, если можно, еще один вопрос: как проверить, что вернула LoadLibrary и где этот вызов отследить?


Сергей М.   (2006-12-22 13:36:00) [7]

Кстати, засада может быть и в инициализации самой dll.

Если ф-ция иниц-ции по каким-то причинам вернула INIT_FAIL (не 0), система вернет в вызвавшее LoadLibrary приложение ошибку именно такого содержания.


Сергей М.   (2006-12-22 13:32:00) [8]


> Akni ©   (22.12.06 13:21) [6]


VB-приложение не использует стат.импорт, т.е. при обращении к декларированной библ.ф-ции вызывает LoadLibrary. Этим фактом и можно воспользоваться, чтобы поставить засаду и поймать "глюк" на месте его попытки возникновения.

Берём любой мало-мальски приличный отладчик (тот же OllyDbg вполне сойдет), грузим VB-приложение, ставим точку останова на входе в kernel32.LoadLibrary, при выполнении приложения ловим ее, ищем в параметре подстроку xprint, если она присутствует, то внимательно анализируем путь, сравнивая его с текущим, а так же с системным по умолчанию и путями, прописанными в переменных окружения.


Akni   (2006-12-22 13:21:00) [9]

за наводку спасибо, но идей пока, увы, никаких.
вот декларация ф-ции в VB:
Private Declare Function ReportX Lib "xprint" (ByVal Wnd As Long, ByVal s As String) As Long

xprint.dll лежит там же, где и exe. декларации не менялись.
в dll была добавлена одна новая ф-ция и dll была перекомпилирована заново. больше изменений никаких.


Сергей М.   (2006-12-22 12:23:00) [10]

Ну так а что же ты тогда говоришь "при попытке вызвать ф-ции" ?
Если файл библиотеки не найден (почему - это уже другой вопрос), о каком вызове может идти речь ?

Между прочим,

 { The network path was not found. }
 ERROR_BAD_ NETPATH = 53;

Каким боком тут (при поиске сист.загрузчиком твоей ДЛЛ) присутствует сетевой путь - думай сам.


Akni   (2006-12-22 12:13:00) [11]

xprint - это и есть имя DLL


Сергей М.   (2006-12-22 12:04:00) [12]

Т.е. имя файла "xprint" тебе вообще ни о чем не говорит, этот файл нигде и никоим образом не фигурирует ни в тексте ДЛЛ ни в тексте VB ?


Akni   (2006-12-22 11:55:00) [13]

немного поподробнее:
это сообщение выдается даже при вызове старых ф-ций из DLL, декларация которых в DLL и код вызова из VB не менялись.
На некоторых компах отрабатываются все вызовы без ошибок, на других при вызове любой ф-ции из DLL выдается «Run-time error 53. File not found xprint».


Сергей М.   (2006-12-22 11:43:00) [14]

Судя по " припопытке вызвать" - в DLL.
Судя по тексту ошибки - в VB


Наверх

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