Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 18-12-2009 15:06 » |
|
(Путаюсь в терминах , описывающих связывание с длл, поэтому по-простому вопрос задам:) экзешник использует A.dll, в программе указывается #pragma comment(lib,"A.lib")
но потом, при запуске, экзешник ищет длл сначала около себя, потом в system32 (в ведь если найдёт - цепляет оттуда...) А как указать путь (хотя бы относительный) к длл, не используя LoadLibrary/ GetProcAddress ? то есть, к примеру, жёстко из папки D:\1\DDL\
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #1 : 18-12-2009 15:31 » |
|
выдернуть %PATH%; добавить в него D:\1\DDL\, сказать SetEnvironmentStr. как думаешь, проканает?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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-объект, зарегистрировать его в системе и загружать его функции через интерфейс.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 18-12-2009 20:08 » |
|
zubr, точно не хочу так )) А других путей совсем нет ?
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #5 : 21-12-2009 05:42 » |
|
Алексей1153++,
1) %PATH% ты всегда можешь вернуть к исходному на выходе; 2) a.dll можно скопировать в system32, а потом убить. если там уже есть копия - затереть, потом восстановить.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 21-12-2009 05:44 » |
|
всё не нравится ( Кину длл рядом с экзешником
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #7 : 21-12-2009 06:31 » |
|
Все переменные окружения локальны для процесса. Т.ч. изменять их можно как угодно. Только стоит помнить, что они наследуются (копируются) в дочерние процессы.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #8 : 21-12-2009 06:51 » |
|
Алексей1153++, посмотри в MSDN поиск по ключевой фразе: Dynamic-Link Library Redirection
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 21-12-2009 07:17 » |
|
PATH, кстати, не подойдёт, ведь я не могу настроить его до запуска программы, а запустить программу не смогу, потому что не будет найдена ДЛЛ... zubr, appname.local - это клёвая вещь, надо запомнить Но не подходит для меня, поскольку я не буду использовать LoadLibrary
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 21-12-2009 07:18 » |
|
Алексей1153++, может, тупо линковать длл в сам экзешник?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 21-12-2009 07:21 » |
|
Мм, ну , во-первых, как это делается ? (пригодится). Во-вторых - длл используется несколькими экзешниками. Во все засунуть ?
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #12 : 21-12-2009 07:35 » |
|
Алексей1153++, она компилируется в файл ресурсов, который ты включаешь в экзешник. а дальше распаковывается куда тебе надо, в дельфях это обычно делается через TResourceStream.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 21-12-2009 07:37 » |
|
Понятно, я то думал, что-то особенное есть для встраивания )
|
|
|
Записан
|
|
|
|
x77
Команда клуба
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 как раз есть раздел про редирект. Понятно, я то думал, что-то особенное есть для встраивания ) Загрузка из ресурса в память процесса, без сохранения на диск. Пример я вроде выкладывал в какой то теме.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 21-12-2009 07:55 » |
|
zubr, у меня .local не пожелал срабатывать - цепляется длл из system32 (около exe я временно убрал для эксперимента). То есть не реагирeет на local никак.
|
|
|
Записан
|
|
|
|
|