| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > LoadLibrary |
| Автор: mrgloom 23.5.2012, 12:46 | ||
была строчка кода
наличие длл проверил, путь тоже всё нормально, но условие не проходит . раньше работало, теперь длл начала зависеть от python27_d.dll и видимо не грузится. Добавлено через 4 минуты и 7 секунд кинул python27_d.dll в ту же папку и заработало. |
| Автор: mrgloom 23.5.2012, 15:37 |
| дело в том что я сам собирал python27_d.dll , т.к. он в стандартной поставке не идет. больше удивляет почему функция LoadLibrary не ругается ,если ей что то не хватает, а просто спокойно выдает нулл. |
| Автор: 500mhz 23.5.2012, 16:40 |
| для ругани есть GetLastError |
| Автор: Dem_max 24.5.2012, 04:38 | ||
Запомни в Windows если функция WinAPI выполнилась не удачно, то либо она может возвращать код ошибки сама, но для получения кода ошибки надо всегда пользовать GetLastError(); |
| Автор: mrgloom 9.6.2012, 14:05 | ||
| странно в дебаге норм, а в релизе не работает. (не помогает так же кидать python.dll в к основной dll в папку) GetLastError выдает ошибку 998. Неверная попытка доступа к адресу памяти. Добавлено через 5 минут и 14 секунд
если это важно мне еще пришлось добавить это, для того чтобы скомпилить релиз версию. |
| Автор: mrgloom 9.6.2012, 14:27 |
| вроде выяснил, что не грузит мою длл, т.к. там есть вызов функции из питона и она вызывается не успешно, но как это обрабатывать непонятно. |
| Автор: mrgloom 13.6.2012, 13:10 |
| теперь такая проблема, запуская свою программу на другом компьютере и она открывается и тут же закрывается, с чем это связано вообще непонятно, вероятно с длл или с тем, что фейлится какая то функция в длл. на компьютере где разрабатывается всё норм. |
| Автор: mrgloom 13.6.2012, 14:07 | ||
что самое интересное, что при нормальной работе т.е.
|
| Автор: feodorv 13.6.2012, 17:44 |
| GetLastError() имеет смысл вызывать при возникновении ошибки или при специально оговоренных ситуациях. В остальных случаях вызовы не обязаны устанавливать ошибку в 0. То есть ошибочная ситуация не может быть проверена через GetLastError(). |
| Автор: mrgloom 14.6.2012, 09:34 |
| ну а как можно понять от чего не запускается программа, если она не выводит никакой отладочной информации? |
| Автор: GremlinProg 14.6.2012, 10:59 | ||||
m_Module != NULL и есть признак успешного вызова LoadLibrary, вот если бы он не выполнялся, тогда можно было бы посмотреть в GetLastError, чтобы понять, что не так, но не наоборот! т.е. нельзя по GetLastError определить, был ли вызов LoadLibrary успешным, т.к. GetLastError дает код последней ошибки в принципе, т.е. код, который был выставлен функцией SetLastError в последний раз, до вызова GetLastError в недрах LoadLibrary вызывается еще куча функций и любая могла выставить этот LastError, который в самой LoadLibrary допустим, поэтому существует правило: посмотреть в GetLastError сразу после вызова функции только при условии, что функция вернулась неуспешно признак успешности/неуспешности зависит от самой функции, и в документации он отдельно оговорен, как например к LoadLibrary:
|
| Автор: mrgloom 25.6.2012, 14:03 |
| а можно как то выводить информацию о том каких длл-ок не хватает? если моя длл тянет за собой еще длл-ки, или я должен их грузить вручную? и проверять загрузились ли? |
| Автор: borisbn 25.6.2012, 16:17 | ||
http://www.dependencywalker.com/ |
| Автор: mrgloom 28.6.2012, 12:13 | ||
этой программой я и так пользуюсь, а вот в самом коде как? если я из главного .exe загружаю свою библиотеку .dll, а она тянет за собой еще .dll сторонние, то как проверить их наличие? + еще как получить какую либо отладочную информацию от стороннего приложения, а то так часто бывает, что запускаешь какой либо .exe, а он программа просто открывается и закрывается или вообще не открывается и не выдаёт ошибок. |