Название: Самописный Dll не находится :( Отправлено: RVZ от Сентябрь 28, 2010, 15:44 Всем Здравствуйте!
В общем тихий ужос! Пытаюсь использовать самописную dllку Dll кА лежит в корне в папек lib то есть каталог проекта выглядит так / /lib /debug /include Программка собирается в каталог debug Файл файл библиотеки libsql1.dll в ней несколько функций для работы с БАзой Код: QLibrary libsql("../lib/libsql1"); Код: qDebug()<<libsql.errorString()<<libsql.fileName()<<" - dll"<<tx; "Cannot load library ../lib/libsql1: Не найдена указанная процедура." "../lib/libsql1" - dll false Подскажите пожалуйста как заставить прогу найти библ Название: Re: Самописный Dll не находится :( Отправлено: Denjs от Сентябрь 28, 2010, 15:53 а с чего вы взяли что у вас _библиотека_ не находится?
у вас по моему не находится имя/функция в данной библиотеке - GetList(). смотрите что вы там в вашей библиотеке творите? не? Название: Re: Самописный Dll не находится :( Отправлено: Amigo_sa от Сентябрь 28, 2010, 15:54 Я обычно использую абсолютные пути, определяемые как QApplication::ApplicationDirPath(), и путь к либе считаю относительно него. Потому что для разных конфигураций может быть разные директории рабочие директории. (WorkingDirectory в студии, кста, она могла у вас поменяться)
Название: Re: Самописный Dll не находится :( Отправлено: Denjs от Сентябрь 28, 2010, 15:59 а мне ещё интересно, что у автора после первой строчки выдаст bool QLibrary::isLoaded () const ????
Название: Re: Самописный Dll не находится :( Отправлено: RVZ от Сентябрь 28, 2010, 18:16 а с чего вы взяли что у вас _библиотека_ не находится? у вас по моему не находится имя/функция в данной библиотеке - GetList(). смотрите что вы там в вашей библиотеке творите? не? Я так подумал основываясь на фразе Cannot load library ../lib/libsql1: и решил что как следствие ->Не найдена указанная процедура bool QLibrary::isLoaded () const <- это хорошая идея завтра на работе проверю самое что удивительное что тот же исходник нормально пере собирается и запускается на домашней машине переменные среды проверил такиеже WorkingDirectory <- Я пока с таким не знаком сейчас возьмусь за изучение класса QProcess Спасибо всем за ответы! теперь появилось направление для раскопок :D Название: Re: Самописный Dll не находится :( Отправлено: RVZ от Сентябрь 29, 2010, 10:09 что то ни че не получается. ???
Цитировать (WorkingDirectory в студии, кста, она могла у вас поменяться) WorkingDirectory <- Я нашел только в классе QProcess но там сказано что этот класс для запуска и управления внешними процессамиЦитировать The QProcess class is used to start external programs and to communicate with them Но все равно добавил такой код на всякий случай в main.cppКод: QProcess proc; выход получился следующий. WD "" WD "D:/Project/RecCom/debug" AppPaph "D:/Project/RecCom/debug" LibPaph ("D:/Project/RecCom/lib", "C:/Qt/4.6.2/plugins", "D:/Project/RecCom/debug") также вывел .isLoaded(); для либы Код: QLibrary libsql("../lib/libsql1"); Вывод получился Is load false Is load false ??? как то странно Название: Re: Самописный Dll не находится :( Отправлено: Alex_cs_gsp от Сентябрь 29, 2010, 10:14 Длл ищется сначала в рабочей директории. Если вы, например, открываете файл какой-либо программой, например двойным кликом по нему, то рабочей директорией будет папка где этот файл расположен, конечно там длл никакой нет. Если под виндой, то на вынь-апи я всегда получал путь, где находится .exe и плясал оттуда, загружая нужные длл.
Название: Re: Самописный Dll не находится :( Отправлено: RVZ от Сентябрь 29, 2010, 13:35 Всем спасибо за внимание!
Проблему решил самым неправильным способом который можно только придумать Переустановил QT и Creator Причем после переустановки пришлось переопределить настройки сборки и настройки запуска в боковом меню проекты А также обнаружилась среди нормальных директорий странная запись “lib” в переменной PATH (Среда выполнения) ее просто удалил В общем после этих действий проект нормально собрался и унюхал библ причем isLoaded() выдал истину только после .resolve Код: QLibrary libsql("../lib/libsql1"); Is load 1 false Is load 2 false Is load 3 true "Unknown error" "../lib/libsql1.dll" - dll true Конечно несколько расстраивает факт что все таки не удалось разобраться что же было не так на самом деле Цитировать Длл ищется сначала в рабочей директории. вот это не есть хорошоу кого нибудь есть пример как заставить приложение искать либы QT только в конкретных местах и не где кроме конкретных мест. Пробовал экспериментировать с libraryPaths() толков ни каких Код: a.removeLibraryPath(a.applicationDirPath()); это наверное уже другая тема(Буду теперь живодерить NCReport). Еще раз всем спасибо!! :D Название: Re: Самописный Dll не находится :( Отправлено: Amigo_sa от Сентябрь 29, 2010, 19:03 Цитировать (WorkingDirectory в студии, кста, она могла у вас поменяться) WorkingDirectory <- Я нашел только в классе QProcess но там сказано что этот класс для запуска и управления внешними процессами |