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

Вниз

вызов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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
2-1170020736
San1
2007-01-29 00:45
2007.02.18
при работе с динамическим массивом ошибка EInvalidPointer


11-1148065780
AndreyRus
2006-05-19 23:09
2007.02.18
KOL&ClearType bug


15-1169802947
Steep
2007-01-26 12:15
2007.02.18
Отчеты


2-1170329275
Beavercrazy
2007-02-01 14:27
2007.02.18
Как узнать, что произошел редирект?


9-1143825829
Yegorchic
2006-03-31 21:23
2007.02.18
Поворот FreeForm