Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Путь к DLL  (Прочитано 15234 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 18-12-2009 15:06 » 

(Путаюсь в терминах , описывающих связывание с длл, поэтому по-простому вопрос задам:)

экзешник использует A.dll, в программе указывается

Код:
	#pragma comment(lib,"A.lib")

но потом, при запуске, экзешник ищет длл сначала около себя, потом в system32 (в ведь если найдёт - цепляет оттуда...)

А как указать путь (хотя бы относительный) к длл, не используя LoadLibrary/ GetProcAddress  ?

то есть, к примеру, жёстко из папки D:\1\DDL\
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 18-12-2009 15:31 » 

выдернуть %PATH%; добавить в него D:\1\DDL\, сказать SetEnvironmentStr. как думаешь, проканает?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 18-12-2009 15:55 » 

трогать  %PATH% не хочется, так как это есть помойка файлов, и что там УЖЕ лежит - один Билл ведает ) Да и теоретически можно повлиять на уже установленные приложения.

« Последнее редактирование: 18-12-2009 15:58 от Алексей1153++ » Записан

zubr
Гость
« Ответ #3 : 18-12-2009 18:20 » 

Алексей1153++, создать из dll COM-объект, зарегистрировать его в системе и загружать его функции через интерфейс.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 18-12-2009 20:08 » 

zubr, точно не хочу так ))
 А других путей совсем нет ?
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 21-12-2009 05:42 » 

Алексей1153++,

1) %PATH% ты всегда можешь вернуть к исходному на выходе;
2) a.dll можно скопировать в system32, а потом убить. если там уже есть копия - затереть, потом восстановить.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 21-12-2009 05:44 » 

всё не нравится ( Кину длл рядом с экзешником
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 21-12-2009 06:31 » 

Все переменные окружения локальны для процесса. Т.ч. изменять их можно как угодно. Только стоит помнить, что они наследуются (копируются) в дочерние процессы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #8 : 21-12-2009 06:51 » 

Алексей1153++, посмотри в MSDN поиск по ключевой фразе: Dynamic-Link Library Redirection
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 21-12-2009 07:17 » 

PATH, кстати, не подойдёт, ведь я не могу настроить его до запуска программы, а запустить программу не смогу, потому что не будет найдена ДЛЛ...

zubr, appname.local - это клёвая вещь, надо запомнить Улыбаюсь Но не подходит для меня, поскольку я не буду использовать LoadLibrary
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 21-12-2009 07:18 » 

Алексей1153++, может, тупо линковать длл в сам экзешник?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 21-12-2009 07:21 » 

Мм, ну , во-первых, как это делается ? (пригодится).
Во-вторых - длл используется несколькими экзешниками. Во все засунуть ?
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #12 : 21-12-2009 07:35 » 

Алексей1153++, она компилируется в файл ресурсов, который ты включаешь в экзешник. а дальше распаковывается куда тебе надо, в дельфях это обычно делается через TResourceStream.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 21-12-2009 07:37 » 

Понятно, я то думал, что-то особенное есть для встраивания )
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 21-12-2009 07:42 » 

Алексей1153++, многие среды имеют свои приблуды. например, у VS.NET есть ILMerge.exe, который позволяет после сборки проекта встроить в него dll и экзешник будет работать без неё.
Записан

zubr
Гость
« Ответ #15 : 21-12-2009 07:43 » 

Алексей1153++, насколько я понимаю, аналогично LoadLibrary будет работать и поиск при неявном связывании. По крайней мере если верить Рихтеру (Создание эффективных WIN32-приложений):
Цитата
Поскольку в разделе импорта указано только имя DLL (без пути), загрузчику приходится самому искать ее ня дисковых устройствах в компьютере пользователя. Поиск DLL осуществляется в следующей последовательности.

Каталог, содержащий ЕХЕ-файл.
Текущий каталог процесса.
Системный каталог Windows
Основной каталог Windows
Каталоги, указанные в переменной окружения PATH.
Учтите, что на процесс поиска библиотек могут повлиять и другие факторы (см. главу 20)
А в главе 20 как раз есть раздел про редирект.
Цитата
Понятно, я то думал, что-то особенное есть для встраивания )
Загрузка из ресурса в память процесса, без сохранения на диск. Пример я вроде выкладывал в какой то теме.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 21-12-2009 07:55 » new

zubr, у меня .local не пожелал срабатывать - цепляется длл из system32 (около exe я временно убрал для эксперимента). То есть не реагирeет на local никак.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines