Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2013, 00:17   #1
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию как указать расположение dll?

Собственно, проблема вот в чем. Пишу проЭкт на Visual Studio 2010, причем используются некоторые сторонние dll. Во время написания все было отлично, но настал момент релиза. Необходимы dll'ки я конечно собрал в кучу и поместил в папку с программой. Все отлично, все работает, НО! только на моем компьютере. Ну, не только на моем, конечно, но есть такие, на которых программа упорно не хочет запускаться. В частности, писал я под Win7, длл'ки тож для нее. Перенес готовый проэкт на комп, где стоит XP. Dll'ки там с таким же именем тоже имеются, но вот по содержанию они очень сильно отличаются. Хоть нужная мне находится в папке с программой, но, насколько мне известно, сначала они(dll) ищутся в системной папке, это которая в c://windows находится. А, так как там лежит другая версия этой библиотеки, но с аналогичным именем, то программа запускаться не хочет...

Вопрос: Можно ли в VS 2010 принудительно указать, какие именно dll загружать для работы? Или хотя бы порядок проверки этих дллек, к примеру, чтоб сначала в папке с программой искала, а потом уж...ну вы поняли. Верю, что решение существует)
monolit111 вне форума Ответить с цитированием
Старый 23.03.2013, 08:13   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Сначала идет поиск рядом с прогой, а потом уже в системных.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 23.03.2013, 09:22   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Сначала идет поиск рядом с прогой, а потом уже в системных.
Есть исключения из этого правила - см. KnownDLLs в реестре.
waleri вне форума Ответить с цитированием
Старый 23.03.2013, 09:38   #4
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

Цитата:
Сначала идет поиск рядом с прогой
Это конечно хорошо, но практика показывает, что ту длл, которая лежит в папке с этой самой прогой игнорируют и пытаются загрузить другую, с таким же именем, откуда-то из системных папок (их там несколько, хз какую грузит, но точно не из папки с прогой). Хотелось бы знать как с этим бороться, все-таки...Кстати, название той длл - msvsrt.dll - так, мало ли. Как минимум с ней эта проблема.
monolit111 вне форума Ответить с цитированием
Старый 23.03.2013, 10:29   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Скорее всего эту DLL грузит как нибудь из системных DLL, которые грузятся по ходу погрузки вашего процесса. После этого до вашей MSVCRT.DLL дело не доходит, ибо уже загружена.

Последний раз редактировалось waleri; 23.03.2013 в 10:33.
waleri вне форума Ответить с цитированием
Старый 23.03.2013, 13:11   #6
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Если DLL в папке с программой можно указать точное её расположение. Получить путь до .exe, обрезать имя исполняемого файла и добавить имя DLL . Я так делал работает 100% и надежнее чем опора на приоритет поиска
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 23.03.2013, 13:58   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Если DLL в папке с программой можно указать точное её расположение.
Это только для LoadLibrary, здесь, похоже, другой случай.
waleri вне форума Ответить с цитированием
Старый 23.03.2013, 14:41   #8
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

Цитата:
Если DLL в папке с программой можно указать точное её расположение. Получить путь до .exe, обрезать имя исполняемого файла и добавить имя DLL . Я так делал работает 100% и надежнее чем опора на приоритет поиска
Если это программно, то я хз, как это делать. До недавнего момента я просто этим не пользовался. поэтому если подскажите как - буду благодарен, но, скорее всего
Цитата:
здесь, похоже, другой случай.
. Так что вопрос открыт.
monolit111 вне форума Ответить с цитированием
Старый 23.03.2013, 22:45   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от monolit111 Посмотреть сообщение
Так что вопрос открыт.
1) Не используйте MSVCRT.DLL
2) Копируйте свой MSVCRT.DLL в системную папку
3) В чем собственно проблема - чем вам мешает системная версия?
waleri вне форума Ответить с цитированием
Старый 23.03.2013, 22:51   #10
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

Цитата:
Не используйте MSVCRT.DLL
Так я и не использую. Я вообще не знаю, для чего она нужна, но прога требует...

Цитата:
Копируйте свой MSVCRT.DLL в системную папку
Это, по некоторым причинам, невозможно. так что исключено.

Цитата:
В чем собственно проблема - чем вам мешает системная версия?
То-ли на разных системах(XP, Win7), то ли еще чего, но не на всех машинах она одинаковая - в этом и проблема. Вот почему и спрашиваю.
monolit111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
uses: указать точное расположение юнита - как? xrob Общие вопросы Delphi 7 11.06.2012 23:59
Как узнать расположение папки мои документы? apromix Win Api 4 08.05.2008 15:04
Как указать в регулярке............ Adamant PHP 12 25.03.2008 10:11
Как сохранять расположение ToolStrip'ов (C#)? behod Общие вопросы .NET 0 27.02.2008 00:39