Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VS2005 трабл с manifest’ом 
V
    Опции темы
DigitSphinx
Дата 8.5.2007, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



При запуске программы выводится сообщение с ошибкой can’t find *.dll надо удалять папку Debug или найти файлы *.manifest и удалить затем откомпилировать проект заново.
как избавится от этой ошибки раз и на всегда ?, какие свойства проекта надо поменять ?


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 8.5.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



ты бы код ошибки без вольного перевода привел... так же неплохо бы чуть больше написать о способе/месте запуска...



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
DigitSphinx
Дата 8.5.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Exe’шник создается нормально , без ошибок !
Но при попытке запуска винда выдает ошибку что типа MFC*.dll не найден ,
Эта ошибка вылезает редко но сильно бесит потому что надо лезть в папку и удалять *.manifest файлы  , на VS2003 такого нет !, только на VS2005.
да и еще почему если поменять с Multi-Byte на Unicode то файл манифеста не подключается и интерфейс из-за этого становится не красивым  smile 


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 8.5.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Цитата(DigitSphinx @  8.5.2007,  14:02 Найти цитируемый пост)
 выдает ошибку что типа MFC*.dll не найден ,

а теперь еще раз попробуй пирвести полный код ошибки без вольного толкования...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rapalex
Дата 8.5.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата(DigitSphinx @  8.5.2007,  14:02 Найти цитируемый пост)
если поменять с Multi-Byte на Unicode то файл манифеста не подключается и интерфейс из-за этого становится не красивым

Вообщето наоборот, а причина в:
Код

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif



--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
DigitSphinx
Дата 8.5.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Rapalex 
Тьфу да на оборот !!!

_hunter
редкая ошибка но вам повезло , она вылезла опять ))
Код

Приложению не удалось запустится, поскольку MSVCR80D.dll не был найден. Повторная установка приложения может исправить эту проблему.

я на всякий случай прикрепил .jpg файлик чтобы можно было еще и посмотреть на ошибку ))
а Debug выдает это
Код

Debugger:: An unhandled non-continuable STATUS_DLL_NOT_FOUND exception was thrown during process load
The program '[3920] asdsada.exe: Native' has exited with code -1073741515 (0xc0000135).



Это сообщение отредактировал(а) DigitSphinx - 8.5.2007, 22:36

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  Error.JPG 18,04 Kb


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
dizzy1984
Дата 9.5.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Это известные грабли, связанные с загрузкой через манифест.
Ну и варианты :
1)Статическая линковка
Цитата

ALT P + P=> General=> Use Of MFC: Use MFC in a static library
ALT P + P=> C/C++=> Code Generation=> Runtime Library : multi-threaded
Ну и ALT P + P=> Linker=> Manifest File=> Generate Manifes=> No

2)Динамическая линковка


Это сообщение отредактировал(а) dizzy1984 - 9.5.2007, 18:34
PM MAIL   Вверх
_hunter
Дата 10.5.2007, 11:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Цитата(DigitSphinx @  8.5.2007,  22:33 Найти цитируемый пост)
редкая ошибка но вам повезло , она вылезла опять ))

это говорит о том, что путь к MSVCR80D.dll не включен в PATH твоей системы. решение: включить его.
при чем тут манифесты?..


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dizzy1984
Дата 10.5.2007, 12:53 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата(_hunter @  10.5.2007,34 Найти цитируемый пост)
при чем тут манифесты?..

Думаю, вам стоит почитать например, это
Если вкраце.
Манифесты содержат информацию для загрузки динамических библиотек (*.dll).
Их смысл - разрешение пробем с версиями dll.
Появились в vs2005.

Сейчас все *.dll находятся в  %WinDir%\WinSxS\<arch_name>_<lib_name>_<key> и следовательно при отсутствии такой папки,
(что может быть на компьютере с неустановленной vs2005 runtime) dll-ка не находится.
Это сообщение и выдается.
Что нужно делать я написал.

Вот еще увидел.
Цитата(DigitSphinx @  8.5.2007,  07:31 Найти цитируемый пост)
надо удалять папку Debug или найти файлы *.manifest 

Файлы *.manifest нужны только для старых приложений, которым необходимо использовать новые библиотеки.
Манифесты логичнее включать в *.exe файл.

Цитата(_hunter @  10.5.2007,  11:34 Найти цитируемый пост)
это говорит о том, что путь к MSVCR80D.dll не включен в PATH твоей системы. решение: включить его.

Функция LoadLibrary ищет динамические библиотеки в следующей последовательности
Цитата

The directory from which the application loaded. 
The current directory. 
The system directory. Use the GetSystemDirectory function to get the path of this directory. 
The Windows directory. Use the GetWindowsDirectory function to get the path of this directory
...
The directories that are listed in the PATH environment variable. 

Маловерояно, что DigitSphinx не догадался положить эту dll-ку в c:\windows или c:\windows\system.
Очевидно - проблема не в этом.

Это сообщение отредактировал(а) dizzy1984 - 10.5.2007, 12:57
PM MAIL   Вверх
_hunter
Дата 10.5.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Цитата(dizzy1984 @  10.5.2007,  12:53 Найти цитируемый пост)
Если вкраце.Манифесты содержат информацию для загрузки динамических библиотек (*.dll).Их смысл - разрешение пробем с версиями dll.

верю. но если загрузчик не может найти либу ( а ищет он ее в PATH'aх) то проблема именно в PATH а не в манифестах...

Добавлено через 1 минуту и 48 секунд
Цитата(dizzy1984 @  10.5.2007,  12:53 Найти цитируемый пост)
Маловерояно, что DigitSphinx не догадался положить эту dll-ку в c:\windows или c:\windows\system.Очевидно - проблема не в этом.

судя по тому, что они до сих пор не ответил на вопрос о запуске -- в этом...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dizzy1984
Дата 10.5.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Тогда может вы объясните почему у меня появляется похожее сообщение, когда я пытаюсь запустить программу с дин. линковкой mfc(vs2005) на чистой windows xp?
Все используемые ей dll я копирую в папку с exe, в папку windows и папку system.

Дело в том что манифест накладывает ограничение на расположение библиотек. Загрузка через манифест не станет грузить dll, которые лежат в месте, отличном от winsxs.
PM MAIL   Вверх
Rapalex
Дата 10.5.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Цитата(dizzy1984 @  10.5.2007,  16:02 Найти цитируемый пост)
Дело в том что манифест накладывает ограничение на расположение библиотек. Загрузка через манифест не станет грузить dll, которые лежат в месте, отличном от winsxs.

А можно ссылку на источник?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
dizzy1984
Дата 11.5.2007, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Redistributing visual c++ files
Potential run-time errors
Первая строка

Еще по теме манифестов
Visual C++ Libraries as Shared Syde By Side Assemblies
Assembly searching sequence

Цитата(_hunter @  10.5.2007,  13:30 Найти цитируемый пост)
но если загрузчик не может найти либу ( а ищет он ее в PATH'aх) то проблема именно в PATH а не в манифестах...

Значит теперь у нас новый загрузчик или новый способ взаимодействия с загрузчиком. 

Это сообщение отредактировал(а) dizzy1984 - 11.5.2007, 06:34
PM MAIL   Вверх
Любитель
Дата 12.5.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



Лоадер экзешников в XP и >, если есть либа в манифесте, он грузит её по технологии манифестов. PATH не при чём. Проверяется:

1. %WinDir%\WinSxS\manifests\<архитектура>_<имя_либы>_<hash-ключ>.manifest. И в той же папочки *.cat файл (сертификат безопасности). Хеш-ключ берётся по данным этого сертификата (конкретный алгоритм не знаю). Если сей манифест находится, то длл-ки берутся из папочки %WinDir%\WinSxS\<имя_манифеста_(см._выше)>

Если там ничего не находится, то далее идут прайват-сборки:

2. <app_dir>\<library_name>.manifest => длл-ки берутся из папки с экзехой. Если и здесь неудача, то:
3. <app_dir>\<library_name>\<library_name>.manifest => из <app_dir>\<library_name>

Вообще сие уже обсуждалось. Например здесь.


Насчёт визуальных стилей. Официально commctl32.dll версий 6 (ну и выше - когда будут) анси-версии своих функций не поддерживает. Точнее не обязана поддерживать. Как пишет МС - в текущих виндах commctl32.dll (шестой версии, т. е. та, что в WinSxS, в system32 - 5-ой) анси-версии поддерживает. Но сие гарантировать МС не собирается. То есть любой win-fix, любой апдейт теоретически может заменить вашу commctl32.dll на чисто юникодную версию. Отсюда соответствующие директивы в недрах CRT.

Впрочем это я тоже уже пару раз где-то писал. На вскидку где - не помню smile Искать не охота

Это сообщение отредактировал(а) Любитель - 22.9.2007, 23:47


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1026 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.