![]() |
|
|
![]()
|
|
| ksili |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Здравствуйте.
Есть проект, который билдится и работает в релизе, но билдится и не работает в дебаге. У меня при запуске дебажной версии возникает ошибка с таким странным сообщением
Ошибка происходит ещё на стадии загрузки всевозможных библиотек, т.е. когда ещё ни строчка своего кода не исполнилось. Строка в Output, во время которой происходит ошибка:
Всё это как-то не давало мне понять где же хотя бы примерно искать ошибку. Но появилась зацепка. Другой человек, который запускал дебажный билд на другом компе сказал, что у него ошибка другая:
Эта ошибка более описана в интернете, что я и изучил. При этом вдобавок известен код,где она происходит:
Этот код используется В Висте для определения наличия композитного режима в теме рабочего стола. Ошибка происходит на строке вызова импортированной функции if (FAILED(DwmIsCompositionEnabledProc(&fDwmEnabled))) Собственно, я делаю билд в Win XP (русская) и у меня этот код вообще не исполняется, а вот тот человек, не знаю - в Висте или в XP и вдобавок английской. Согласно тому, что я нашёл в инете про эту ошибку, я попробовал исправить строку объявления указателя на функцию на
и
Однако у меня всё также Порядковый номер 13161 не найден в библиотеке DLL mfc90ud.dll. Есть у кого-нибудь хоть какие-нибудь ещё мысли, что в этом коде можно поправить? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||||||||||||
|
|||||||||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
Мысль пока единственная - эти ошибки НИКАК друг с другом не связанны
По поводу
|
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
У меня ввобще два раздела. В одном стоит Win XP SP3 с MSVS 2005, а на втором та же Win XP SP3, но с MSVS 2008. Этот проект выполняется в MSVS 2008. Как мне быть уверенным, что при сборке случайно не используется mfc90ud.dll из MSVS 2005? В свойствах проекта посмотрел - везде, где стоит имя диска, оно указано верно. Добавлено через 4 минуты и 17 секунд поправочка: в MSVS 2005 mfc90ud.dll вообще нет. Там mfc80ud.dll. Зато в MSVS 2008 их несколько в разных папках -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: нет Всего: 223 |
dll ищется run-time по стандартным путям. Директории, которые прописанны в VS на это никак не влияют
Еще можно отключить в VS сборку с динамическими библиотеками (использовать статический run-time) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Этот порядковый номер используется вместо имени функции на импорте. Он должен быть прописан в def-файле библиотеки. Похоже, линкуется не та версия, которая потом используется. Можно просто поиском посмотреть это число.
-------------------- ... |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Их 9 штук и они все разные Попробовал положить рядом с exe'шником две наиболее вероятные из них: лежащие по путям D:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugMFC\mfc90ud.dll и D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\x86\MFC90UD.DLL. Ошибка осталась. Остальные лежат в папках D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\mipsiv_fp\, D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\mipsiv\, D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\mipsii_fp\, D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\mipsii\, D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\armv4i\, D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\armv4\, и D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\sh4\ Так что думаю они вообще из другой оперы
Из двух проверенных dll только в одной (самой большой, которая в папке redist) был найден ординал 13161 в таблице экспорта. Но помещение её в папку с экзешником ошибку при рантайме не исправило.
Как это сделать? Я чё-то в свойствах проекта такой настройки не нашёл. Ещё момент: в проекте у меня экзкшник и dll, которая внедряется в другие процессы. Не увеличится ли значительно её размер при использованиии статического run-time? Это нежелательно. Это сообщение отредактировал(а) ksili - 26.6.2009, 05:52 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
А выдал он следующее: во-первых, не нашёл DWMAPI.DLL, но это понятно, т.к. это вистовская библиотека, а я в XP. во-вторых, подсвечена MFC90UD.DLL. Щёлкнул по ней, открылось второе окно, в котором показывается, что у этой длл зависимость от MSVCR90D.DLL и она не найдена. Что ещё интересно, MFC90UD.DLL берется из папки D:\windows\winsxs\x86_microsoft.vc90.debugmfc_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_2a62a75b. чё-то я не догадывался, что они ещё могут быть в папках винды. Там оказывается таких папок куча, причём рядом с этой папкой лежит папка x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456, а в ней эта самая MFC90UD.DLL. Почему она не находится - для меня загадка. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Кстати в dll из D:\windows\winsxs\x86_microsoft.vc90.debugmfc_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_2a62a75b в экспорте не нашлось 13161.
поэтому я заменил её на ту, в которой она есть и программа запустилась в дебаге! Но все же мне кажется это неполным решением, т.к. я не понимаю из-за чего так произошло и не поломал ли я чего-нибудь другого такой заменой. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
У меня манифест открывается практически как XML-файл. Из существенного там:
Т.е. используется версия библиотеки 9.0.21022.8. Это как раз та, в которой нет 13161. А я фактически заменил её на библиотеку версии 9.0.30729.1. Если я просто перепишу в манифесте версию, будет ли это корректно? Дело в том, что по пути D:\windows\winsxs\ нет папки DebugCRT с такой версией, там только с версией 9.0.21022.8. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
ты можешь и свой манифест написать при желании.
Например для common controls: 1) делаем xml файл с именем "программа.exe.manifest"
2) открываем rc файл как код и вписываем строку:
3)добавляем в проект файл "Программа.exe.manifest".... усе... а ну, может тебе в секции linker настройки отключить генерирование манифеста можно в случае его ручного "заведения".... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |