Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
#1

Как указать директорию для динамических библиотек - C++

17.04.2014, 18:31. Просмотров 1337. Ответов 41
Метки нет (Все метки)

Проблема в том, что заюзав кучу динамических библиотек, 20 файлов лежат у меня в директории выходной программы. Хотелось бы их в папочку bin запихнуть, да прога жалуется - найти не может. Настройки проекта смотрел, ничего дельного не нашёл. Не подскажите, что делать?
P.S. надеюсь, исходник не надо...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2014, 18:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как указать директорию для динамических библиотек (C++):

Как компилятору указать директорию заголовочных файлов. - C++
Мне надо на Visual Studio 2010 Ultimate. Нужно указать директорию заголовочных файлов DirectX'а.

Как лучше копировать память, обмениваться указателями и т.д. при работе с кучей динамических библиотек (DLL) ? - C++
Привет! Вот есть много DLL-к, каждая работает со своей внутренней динамической памятью, а так же есть необходимость работать с объектами...

Указать директорию - C++
Здравствуйте. Пишу программу в борланде 6, в которой надо указать путь, из которого программа будет брать фаилы. С помощью чего это можно...

Разработка динамических библиотек - C++
Какая есть литература по разработке dll на русском/английском (язык не важен) или появится в ближайшее время ?

Зависимость от динамических библиотек - C++
Как определить от каких дин. библиотек зависит приложение, в Linux ldd в Windows есть что то подобное?

Создание динамических библиотек DLL С++ - C++
Помогите реализовать на С++ : Розробити динамічно завантажувану бібліотеку, котра використовує функцію, що виводить отриманий параметр...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
18.04.2014, 17:47 #16
WinRar007, почему бы не расположить саму запускаемую программу в папку bin, где ей и место, а уже остальные ресурсы по другим папкам?
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 19:18  [ТС] #17
Прога не будет видеть локальные пути к каталогам "снаружи" bin.
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
18.04.2014, 19:22 #18
А для чего ей их видеть? Пути в программе можешь переделать через ".."
0
stima
474 / 323 / 31
Регистрация: 22.03.2011
Сообщений: 1,047
Завершенные тесты: 2
18.04.2014, 19:22 #19
...

Цитата Сообщение от stima Посмотреть сообщение
Создайте промежуточный bat файл:
C++
1
2
3
@echo off
SET PATH=%PATH%;%cd%\bin
start myprogram.exe
0
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 849
Завершенные тесты: 1
18.04.2014, 19:33 #20
Также интересует данный вопрос. К примеру Viber, который написан на qt, держит свои dll в папочке bin. А exe на один уровень выше.
1
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 19:41  [ТС] #21
Ребят, это лично для меня, для систематизации данных. Не нужны мне обходные пути со сменами каталогов и батниками. Мне нужно решение. Пожалуйста.
0
Убежденный
Системный программист
Эксперт С++
15555 / 7063 / 1115
Регистрация: 02.05.2013
Сообщений: 11,474
Завершенные тесты: 1
18.04.2014, 19:42 #22
Цитата Сообщение от nmcf Посмотреть сообщение
SetDllDirectory влияет только на динамическую загрузку DLL через LoadLibrary. Если привязка статическая, то это бесполезно.
Кроме динамической и статической привязки есть еще delayed import,
сочетающая свойства обеих.
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
18.04.2014, 19:45 #23
Убеждённый, ты конечно крут, но мы до сих пор не знаем, как у него сделано.
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 19:51  [ТС] #24
Код выложить?
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
18.04.2014, 19:53 #25
Можно.
0
Убежденный
Системный программист
Эксперт С++
15555 / 7063 / 1115
Регистрация: 02.05.2013
Сообщений: 11,474
Завершенные тесты: 1
18.04.2014, 19:54 #26
Вот. Распаковать в любую папку и запустить exe.

DELAY.ZIP

DelayLoad.exe при запуске вызывает функцию из Library.dll, которая выводит
обычный MessageBox. Причем dll-ка лежит не рядом с exe, а в папке bin.

Контрольные суммы, на всякий случай:

File: DELAY.ZIP
Size: 50945 bytes
MD5: 6C4A769A9EDB88AC93092E90508AE32C
SHA-1: D800184A42A6FD6FFD84AA0FB9DE34F0EB86C1D4
SHA-256: ABFB827B181D89759A678EEDBFCE53AE2177F72AF6111B5DE9821C4561CDCD6F
CRC-32: 3AD6DFCC
1
Убежденный
Системный программист
Эксперт С++
15555 / 7063 / 1115
Регистрация: 02.05.2013
Сообщений: 11,474
Завершенные тесты: 1
18.04.2014, 19:55 #27
Делается это все одним ключом компоновщика (/DELAYLOAD) и SetDllDirectory.
1
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:10  [ТС] #28
Код, не?
0
Убежденный
Системный программист
Эксперт С++
15555 / 7063 / 1115
Регистрация: 02.05.2013
Сообщений: 11,474
Завершенные тесты: 1
18.04.2014, 20:18 #29
Dll
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <Windows.h>
 
 
 
BOOL _stdcall DllMain(HINSTANCE, DWORD, VOID *)
{
    return TRUE;
}
 
 
 
__declspec(dllexport)
void func()
{
    MessageBoxA(NULL, "Hello !", "Message", MB_ICONINFORMATION);
}
Exe
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <string>
#include <Windows.h>
 
 
 
void func();
 
 
 
int _stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    // Обработка ошибок опущена для простоты восприятия.
 
    using namespace std;
 
    wchar_t *pBuffer = new wchar_t[32780];
    GetModuleFileNameW(NULL, pBuffer, 32780);    
    wstring Path = pBuffer;
    delete [] pBuffer;
    wstring::size_type iSlash = Path.find_last_of(L"\\/");
    Path = Path.substr(0, iSlash);
    Path += L"\\bin";
    SetDllDirectoryW(Path.c_str());
    func();
    return 0;
}
Visual C++ 2008 SP1 Professional,
конфигурация Release/Win32, все ключи сборки по умолчанию,
за исключением "Runtime Library = Multi-Threaded (/MT)" и
для exe "Delay Loaded Dll = Library.dll".
0
WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:30  [ТС] #30
Всё равно ошибка.
P.S. Почему не прикрепляет картинку с Яндекс.Диск?
http://yadi.sk/d/CScUrtMVMjgCW
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 20:30
Привет! Вот еще темы с ответами:

Указать директорию компиляции в code::blocks - C++
Всем доброго времени суток! Недавно скачал code::blocks, никак немогу разобраться есть ли функция указать компилятору куда сохранять...

Быстродействие программы при использовании статических и динамических библиотек - C++
Всем привет! Понимаю, что вопрос простой... но не могу, не получить экспертного мнения. Правильно ли я понимаю, что программы, которые...

Как указать место для сохранения данных в txt - C++
с помощью параметра командной строки? Заранее спасибо!

Как прочитать корневую директорию, как файл в hex-ввиде? - C++
Файл можно открыть так: #include &lt;iostream&gt; #include &lt;cstdio&gt; int main() { FILE * ptrFile = fopen(&quot;G:\filename.txt&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.04.2014, 20:30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru