|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.02.2019, 21:51 | #1 |
Пользователь
Регистрация: 06.01.2019
Сообщений: 13
|
Поясните фрагмент кода #pragma comment
в VS2008 создал из шаблона MFC проект. Все работает. Далее подключаю стороннюю dll. Компиляция проходит успешно. Однако, при запуске приложения ругается на отсутствие MSVCP90.dll. Поиск показал, что такие файлы находятся в подпапках каталога C:\Windows\winsxs. Аналогично и в C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist. Методом "научного тыка" из примера (вроде как был создан в VS2008), поставляемого с подключаемой dll, скопировал в проект кусок кода:
Код:
1. Почему без этого кода exe-шник не может найти нужные dll? 2. Где в проекте определяются директивы #ifdef _DEBUG и #ifdef _M_IX86, что условие становится истинным? Где-то в свойствах проекта? 3. Поясните суть этого кода. И как оно влияет на поиск нужной dll. В книге не помню, что бы такое писали. Или дайте ссылку, где хорошо об этом написано. 4. Если создавать аналогичный MFC проект в VS2010, что с данным куском кода, что без, ругается на отсутствие MSVCP90.dll. Заметил, если создать проект в VS2008 c данным куском кода. Затем открыть его в VS2010 и в настройках поставить Platform toolset v90, то работает. Как, изначально создавая проект в VS2010, указать на эту dll? Спасибо. |
11.02.2019, 23:02 | #2 | |||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Потому что mfc либы не регистрировались глобально, а помещались в winsxs кеш и "загружались" если были прописаны в зависимостях.
Цитата:
Цитата:
https://docs.microsoft.com/en-us/win...ide-assemblies Цитата:
|
|||
12.02.2019, 15:42 | #3 |
Пользователь
Регистрация: 06.01.2019
Сообщений: 13
|
Установка разных версий 2008-го редистриба и копирование dll в папку с exe не помогло :/
Последний раз редактировалось pucher; 12.02.2019 в 15:46. |
12.02.2019, 15:54 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Для 2008 надо использовать side-by-side или извращаться.
|
12.02.2019, 17:28 | #5 | |
Пользователь
Регистрация: 06.01.2019
Сообщений: 13
|
Дело в том, что при создании проекта в VS2008 и использовании указанной директивы всё работает. Я так понимаю, side-by-side это указание использования конкретной версии нужной dll, находящейся в папке winsxs. Как я понял, dll в этой папке не регистрируются в системе, как те, что в system32. А эта директива указывает, что dll нужно искать в той папке, при чем нужной версии.
Вопрос же в том, если проект создать в VS2010 и вставить те директивы, то при компиляции появляется предупреждение Цитата:
Я понимаю, можно создать проект в VS2008, открыть его в VS2010, установить platform tools v90 и работать. Но, это же не дело. |
|
12.02.2019, 17:38 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Я же ссылки давал и уже писал:
для 2008 используйте side-by-side для 2010 распространяйте длл/редистриб пак, т.к. с 2010 длл версионные |
12.02.2019, 17:56 | #7 | ||
Пользователь
Регистрация: 06.01.2019
Сообщений: 13
|
Цитата:
Теперь с vs2010. Не может найти MSVCP90.dll. Этот файл относится к редистрибу 2008. Я написал, установил его разные версии. Не помогло. Скопировал dll в папку с программой, не может найти уже другой файл, тоже *90*.dll. Так три dll скопировал. После чего выскакивает ошибка Цитата:
|
||
12.02.2019, 18:01 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Значит часть проекта/какая-то либа собрана 2008 студией. Пересоберите все 2010.
|
12.02.2019, 18:26 | #9 | ||
Пользователь
Регистрация: 06.01.2019
Сообщений: 13
|
Цитата:
В документации к данной библиотеке написано: Цитата:
Так вот, изначальный вопрос. Хочу создать приложение exe в vs2010 (или выше), построенное, соответственно, на версии редистриба 2010 (или выше). При этом могу ли я подключить к этому приложению сторонний dll, использующий старые версии библиотек (редистриба 2008, например)? При том что, судя по #pragma comment (из примера проекта, поставляемого с этой библиотекой), она использует принцип side-by-side. А для проекта, созданного в vs2010 такой принцип не используется, судя по вашим словам. В этом и вопрос, как? Спасибо Последний раз редактировалось pucher; 12.02.2019 в 18:41. |
||
12.02.2019, 19:35 | #10 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
А ваша либа позволяет статически линковаться?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Фрагмент кода | ciy | Общие вопросы Delphi | 3 | 24.04.2017 17:53 |
Подправить фрагмент кода | Программистер | Общие вопросы Delphi | 0 | 19.01.2017 19:21 |
Объясните фрагмент кода | ka11n | Общие вопросы C/C++ | 4 | 04.09.2014 16:27 |
Удалить фрагмент из кода | DeadWarlock | Общие вопросы Delphi | 2 | 03.02.2012 00:26 |
Фрагмент кода С++ | Роман Кор | Общие вопросы C/C++ | 6 | 22.02.2009 19:25 |