Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > MDI приложение неверно настроенно


Автор: nikitao 12.3.2006, 18:12
Че то я туплю.Создал MDI ,отлинковал.Запускаю на виртуальной машине(вместе с mfc80.dll и msvcr80.dll и получаю бан.Пишет ,что приложение неправельно настроенно???Может надо еще что-то присоеденить(если копирую статически отлинкованый ,то все нормально).??? smile

Автор: CaptainFlint 12.3.2006, 23:51
nikitao
В 2005 студии ввели так называемые side-by-side assemblies. Не знаю, зачем, видимо, посчитали, что нельзя так просто давать простым смертным распространять программки всего лишь добавлением нужных DLL - слишком просто, мол. Нет той запутанности, которая придаёт процессу создания и распространения программы необходимый шарм...

Почитай http://www.codeproject.com/cpp/vcredists_x86.asp. В ней кое-что описано по этому поводу. Если вкратце: к этим двум DLL-кам нужно ещё добавить два файла манифеста, взятые из папки redist и обработанные напильником.

Автор: nikitao 13.3.2006, 12:25
Цитата(CaptainFlint @ 13.3.2006, 00:51 Найти цитируемый пост)
Не знаю, зачем, видимо, посчитали, что нельзя так просто давать простым смертным распространять программки всего лишь добавлением нужных DLL - слишком просто, мол. Нет той запутанности, которая придаёт процессу создания и распространения программы необходимый шарм...

smile smile smile


CaptainFlint, спасибо!!!Буду разбираться

Автор: Earnest 13.3.2006, 12:51
Цитата(CaptainFlint @ 12.3.2006, 23:51 Найти цитируемый пост)
Нет той запутанности, которая придаёт процессу создания и распространения программы необходимый шарм...

+1

Автор: nikitao 14.3.2006, 21:41
CaptainFlint, если не сложно,то опиши пожалйста процесс создания подробнее,а то у меня с английским проблемы smile

Автор: CaptainFlint 14.3.2006, 23:07
nikitao
Первый способ - официальный: создать инсталлятор. Я с ним не разбирался, так что ничего сказать не смогу.
Второй способ попроще. Идёшь в папку \Program Files\Microsoft Visual Studio 8\VC\redist\x86\. Там выбираешь те подпапки, которые тебе нужны - по названию легко догадаться. (Например, для типичного MFC-приложения требуются папки Microsoft.VC80.CRT и Microsoft.VC80.MFC.)
Теперь определяешь, какие конкретно библиотеки из этих подпапок нужны твоему приложению. Опять-таки, типичная ситуация, когда нужны только msvcr80.dll (из папки CRT) и mfc80.dll (из папки MFC). Копируешь эти библиотеки в каталог к своей программе (скомпилённой, разумеется, в релизе), и вдобавок кидаешь туда manifest-файлы из всех подпапок, из которых копировал хотя бы один файл (в моём примере это будут два файла: Microsoft.VC80.MFC\Microsoft.VC80.MFC.manifest и Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest). Теперь открываешь эти файлы в текстовом редакторе, поддерживающем UTF-8 (обычный Блокнот в NT/2000/XP/2003 виндах её поддерживает) и в конце видишь список DLL-файлов в таком виде:
Код
    <file name="mfc80.dll"/>
    <file name="mfc80u.dll"/>
    <file name="mfcm80.dll"/>
    <file name="mfcm80u.dll"/>
Среди этих строчек удаляешь все те, которые не относятся к файлам, реально требуемым твоему приложению (соответственно, всё в том же примере останется одна запись в MFC-манифесте и одна - в CRT-манифесте). Всё! Итого в простейшем случае MFC-приложения получается комплект из 5-ти файлов:
1. Application.exe
2. msvcr80.dll
3. mfc80.dll
4. Microsoft.VC80.CRT.manifest
5. Microsoft.VC80.MFC.manifest
Этот комплект можно копировать на другой комп, где не установлена студия - всё будет запускаться.

Автор: nikitao 18.3.2006, 00:22
Странно,но так как сказал CaptainFlint не получилось ,а вот через инстолятор все OK smile
Проблема решена,если не считать одной проблемки: я что-то намутил в проекте моего приложения,что теперь оно не хочет компилироваться в режиме Release::DLL(выдает ошибку про коректность в самой студии smile ),а все остальные режимы работают smile smile

Автор: Ильнар 24.3.2006, 16:59
Смотрика заработало, приложение запустилось. У меня следующий вопрос: когда создаешь инсталятор надо будет указать куда копировать необходимые *.dll-ки, то есть эти две *.dll-ки обязательно попадут по назначению! но ведь тогда нарушается принцип самодостаточности exe-шника! нельзя ли как -нибудь в настройках проекта указать чтобы эта сволочь (VC8) все засунула в exe-файл? и кроме одного файла приложения на выходе больше ничего не было!

Автор: Earnest 24.3.2006, 19:23
Цитата(Ильнар @ 24.3.2006, 16:59 Найти цитируемый пост)
но ведь тогда нарушается принцип самодостаточности exe-шника!

Сам придумал принцип? smile
Хочешь все свалить в EXE -выбери поддержку MFC как static libraries (как-то так). Это в настройках проекта.

Автор: Ильнар 27.3.2006, 11:53
В натуре, работает без всяких dll-ок. Только вот размер exe-шника вырос в 4 раза, но это не проблема при современных аппаратных возможностях.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)