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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2014, 11:19   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Как поместить dll не в корень?

Вот такой вопросик: как подключаемую dll разместить не в корне программы? Такие, как bass, 7z, sqlite и т.п. Где/как указать к ней путь?
Ship_1 вне форума Ответить с цитированием
Старый 19.11.2014, 11:31   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

динамически загружать через LoadLibrary по указанному пути, и получать адреса методов.
Человек_Борща вне форума Ответить с цитированием
Старый 19.11.2014, 11:54   #3
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
динамически загружать через LoadLibrary по указанному пути, и получать адреса методов.
Это не обязательно, можно путь указывать и таким образом:
Код:
const
  bassdll = 'Data\Lib\bass.dll';

function BASS_SetConfig(option, value: DWORD): BOOL; stdcall; external bassdll;
Оно будет резолвиться относительно "рабочей директории", кажется так.
StriderX вне форума Ответить с цитированием
Старый 19.11.2014, 12:21   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от StriderX Посмотреть сообщение
Это не обязательно, можно путь указывать и таким образом:
Код:
const
  bassdll = 'Data\Lib\bass.dll';

function BASS_SetConfig(option, value: DWORD): BOOL; stdcall; external bassdll;
Оно будет резолвиться относительно "рабочей директории", кажется так.
не припомню чтоб статический импорт такое позволял.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.11.2014, 12:22   #5
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

А если мне нужно не только процедуры, но и тип определить? Например, TSQLiteDatabase из SQLite?
Ship_1 вне форума Ответить с цитированием
Старый 19.11.2014, 12:43   #6
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не припомню чтоб статический импорт такое позволял.
Это не из головы - это из рабочего проекта.

Цитата:
Сообщение от Ship_1
А если мне нужно не только процедуры, но и тип определить? Например, TSQLiteDatabase из SQLite?
Типы переколачиваются либо руками, либо под них пишется утилита, либо скачивается готовая (для перегонки хидеров), либо хидеры уже кто-то перегнал (например, для bass из коробки всё уже сделано).
StriderX вне форума Ответить с цитированием
Старый 19.11.2014, 12:58   #7
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от StriderX Посмотреть сообщение
либо скачивается готовая (для перегонки хидеров), либо хидеры уже кто-то перегнал (например, для bass из коробки всё уже сделано).
Ко всем dll есть соответствующие pas. Думал, через File -> Use Unit если добавить - он и dll-ку там же найдёт. Но не нашёл...
Ship_1 вне форума Ответить с цитированием
Старый 19.11.2014, 13:22   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
Ко всем dll есть соответствующие pas. Думал, через File -> Use Unit если добавить - он и dll-ку там же найдёт. Но не нашёл...
не будьте наивны, pas должен кто-то создать.

pas и dll не имеют прямой связи, заботу по тасканию dll вы должны сами осуществлять.
так же если вас не устраивает обычный pas то тоже переписать его должны вы сами.

Цитата:
Это не из головы - это из рабочего проекта.
ну хорошо.
хотя мне интересно глянуть на бинарник с таким импортом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.11.2014, 15:12   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,568
По умолчанию

Цитата:
Сообщение от Ship_1 Посмотреть сообщение
А если мне нужно не только процедуры, но и тип определить? Например, TSQLiteDatabase из SQLite?
DLL предоставляет только функции/процедуры. Типы из DLL не импортируются. Но для этого пишется модуль импорта, где все типы, константы и заголовки подпрограмм объявляются.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
Как вывести корень из числа? GidroFobia Помощь студентам 14 17.03.2012 15:33
Как поместить элементы в массив? tocsik Общие вопросы Delphi 4 28.09.2009 19:15
Как вычислит корень из числа? Paul_AG Общие вопросы C/C++ 6 04.04.2009 14:47
как найти корень из числа $Дмитрий Общие вопросы Delphi 7 26.04.2007 13:40