Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизвызовDelphi-DLL из VB - File not found? Найти похожие ветки
← →
Akni © (2006-12-22 11:34) [0]Добрый день всем.
Ситуация такая:
Есть DLL на Delphi (не ActiveX) , вызываемая из VB. Периодически в DLL и в основную программу на VB вносятся изменения, все компилируется заново и работает дальше.
После последнего Update’а на НЕКОТОРЫХ (не на всех!) компьютерах в системе при попытке вызвать ф-ции из DLL выдается сообщение «Run-time error 53. File not found xprint». DLL лежит там же, где и EXE, в конфигурации ничего не меняли.
Подскажите, пожалуйста, в чем может быть причина. Где искать – в DLL или в VB?
← →
Сергей М. © (2006-12-22 11:43) [1]Судя по "при попытке вызвать" - в DLL.
Судя по тексту ошибки - в VB
← →
Akni © (2006-12-22 11:55) [2]немного поподробнее:
это сообщение выдается даже при вызове старых ф-ций из DLL, декларация которых в DLL и код вызова из VB не менялись.
На некоторых компах отрабатываются все вызовы без ошибок, на других при вызове любой ф-ции из DLL выдается «Run-time error 53. File not found xprint».
← →
Сергей М. © (2006-12-22 12:04) [3]Т.е. имя файла "xprint" тебе вообще ни о чем не говорит, этот файл нигде и никоим образом не фигурирует ни в тексте ДЛЛ ни в тексте VB ?
← →
Akni © (2006-12-22 12:13) [4]xprint - это и есть имя DLL
← →
Сергей М. © (2006-12-22 12:23) [5]Ну так а что же ты тогда говоришь "при попытке вызвать ф-ции" ?
Если файл библиотеки не найден (почему - это уже другой вопрос), о каком вызове может идти речь ?
Между прочим,
{ The network path was not found. }
ERROR_BAD_NETPATH = 53;
Каким боком тут (при поиске сист.загрузчиком твоей ДЛЛ) присутствует сетевой путь - думай сам.
← →
Akni © (2006-12-22 13:21) [6]за наводку спасибо, но идей пока, увы, никаких.
вот декларация ф-ции в 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 13:32) [7]
> Akni © (22.12.06 13:21) [6]
VB-приложение не использует стат.импорт, т.е. при обращении к декларированной библ.ф-ции вызывает LoadLibrary. Этим фактом и можно воспользоваться, чтобы поставить засаду и поймать "глюк" на месте его попытки возникновения.
Берём любой мало-мальски приличный отладчик (тот же OllyDbg вполне сойдет), грузим VB-приложение, ставим точку останова на входе в kernel32.LoadLibrary, при выполнении приложения ловим ее, ищем в параметре подстроку xprint, если она присутствует, то внимательно анализируем путь, сравнивая его с текущим, а так же с системным по умолчанию и путями, прописанными в переменных окружения.
← →
Сергей М. © (2006-12-22 13:36) [8]Кстати, засада может быть и в инициализации самой dll.
Если ф-ция иниц-ции по каким-то причинам вернула INIT_FAIL (не 0), система вернет в вызвавшее LoadLibrary приложение ошибку именно такого содержания.
← →
Akni © (2006-12-22 13:48) [9]спасибо.
мне кажется, что дело скорее всего в dll. тогда, если можно, еще один вопрос: как проверить, что вернула LoadLibrary и где этот вызов отследить?
← →
umbra © (2006-12-22 13:55) [10]> как проверить, что вернула LoadLibrary и где этот вызов
> отследить?
импортируйте ее в ВБ проект и смотрите на здоровье
← →
Сергей М. © (2006-12-22 14:05) [11]
> как проверить, что вернула LoadLibrary и где этот вызов
> отследить?
Сделай в Делфи тестовое приложение. Брось на форму кнопку, в OnClick напиши
Win32Check(LoadLibrary("xprint.dll"))
Положи исп.файл приложения в тот же каталог, где размещен исп.файл VB-приложения, запусти, нажми кнопку.
Если не увидишь окна с ошибкой, значит иниц-ция успешно выполнена и врет то самое VB-приложение
← →
Akni © (2006-12-22 14:30) [12]спасибо еще раз. это оказался VB. будем искать дальше. вот только никакого мало-мальски приличного отладчика у нас нет
← →
Сергей М. © (2006-12-22 14:40) [13]
> никакого мало-мальски приличного отладчика у нас нет
Скачай OllyDbg, он небольшой и не требует инсталляции
← →
tesseract © (2006-12-22 16:59) [14]гм а попробуй DLL с полным маршрутом указать. Может рабочая папка в настоящий момент другая и VB DLL не видит.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.07 c