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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
17.04.2014, 18:31     Как указать директорию для динамических библиотек #1
Проблема в том, что заюзав кучу динамических библиотек, 20 файлов лежат у меня в директории выходной программы. Хотелось бы их в папочку bin запихнуть, да прога жалуется - найти не может. Настройки проекта смотрел, ничего дельного не нашёл. Не подскажите, что делать?
P.S. надеюсь, исходник не надо...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2014, 18:31     Как указать директорию для динамических библиотек
Посмотрите здесь:

Как компилятору указать директорию заголовочных файлов. C++
C++ Указать директорию компиляции в code::blocks
C++ Как создать директорию?
C++ Разработка динамических библиотек
C++ Зависимость от динамических библиотек
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 19:41  [ТС]     Как указать директорию для динамических библиотек #21
Ребят, это лично для меня, для систематизации данных. Не нужны мне обходные пути со сменами каталогов и батниками. Мне нужно решение. Пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 1
18.04.2014, 19:42     Как указать директорию для динамических библиотек #22
Цитата Сообщение от nmcf Посмотреть сообщение
SetDllDirectory влияет только на динамическую загрузку DLL через LoadLibrary. Если привязка статическая, то это бесполезно.
Кроме динамической и статической привязки есть еще delayed import,
сочетающая свойства обеих.
nmcf
4275 / 3706 / 1246
Регистрация: 14.04.2014
Сообщений: 14,500
18.04.2014, 19:45     Как указать директорию для динамических библиотек #23
Убеждённый, ты конечно крут, но мы до сих пор не знаем, как у него сделано.
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 19:51  [ТС]     Как указать директорию для динамических библиотек #24
Код выложить?
nmcf
4275 / 3706 / 1246
Регистрация: 14.04.2014
Сообщений: 14,500
18.04.2014, 19:53     Как указать директорию для динамических библиотек #25
Можно.
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 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
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 1
18.04.2014, 19:55     Как указать директорию для динамических библиотек #27
Делается это все одним ключом компоновщика (/DELAYLOAD) и SetDllDirectory.
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:10  [ТС]     Как указать директорию для динамических библиотек #28
Код, не?
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 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".
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:30  [ТС]     Как указать директорию для динамических библиотек #30
Всё равно ошибка.
P.S. Почему не прикрепляет картинку с Яндекс.Диск?
http://yadi.sk/d/CScUrtMVMjgCW
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 1
18.04.2014, 20:42     Как указать директорию для динамических библиотек #31
Цитата Сообщение от WinRar007 Посмотреть сообщение
Всё равно ошибка.
Где текст ошибки ? Где сам exe-шник хотя бы ?
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:48  [ТС]     Как указать директорию для динамических библиотек #32
SPACE.zip
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 20:52  [ТС]     Как указать директорию для динамических библиотек #33
Ошибка та же.

Добавлено через 24 секунды


Добавлено через 3 минуты
Можно прямо пошагово показать, как делал?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
18.04.2014, 21:16     Как указать директорию для динамических библиотек #34
ArmanPrestige, ну значит он подключается к ним средствами программы, и уже непосредственно в ней производится экспорт функций
Убежденный
Системный программист
 Аватар для Убежденный
14182 / 6197 / 984
Регистрация: 02.05.2013
Сообщений: 10,323
Завершенные тесты: 1
18.04.2014, 22:08     Как указать директорию для динамических библиотек #35
WinRar007, в Вашем exe нет delayed import-а.
В Windows SDK / Visual Studio есть такой инструмент - dumpbin, он
показывает различную информацию про PE-модули (exe/dll/sys), в
том числе и секции импорта.

Вот результат dumpbin.exe, полученный на моем exe-шнике:

dumpbin.exe /ALL /RAWDATA:NONE
Код
...

Section contains the following delay load imports:

    Library.dll
              00000001 Characteristics
              0040DD60 Address of HMODULE
              0040DD4C Import Address Table
              0040C434 Import Name Table
              0040C44C Bound Import Name Table
              00000000 Unload Import Name Table
                     0 time date stamp

          00401819               0 ?func@@YAXXZ

...
Если "натравить" dumpbin.exe на SPACE.EXE, он никакой информации
про delayed-dll не показывает. То есть, секции с delayed-импортом
вообще в данном exe нету (RVA = 0).

И кстати, задавать данный ключ компоновщика через прагму не следует,
потому что этот метод поддерживает не все опции, а только малую часть.

comment (C/C++)
http://msdn.microsoft.com/en-us/library/7f0aews7.aspx

Only the following (comment-type) linker options are available to be passed to the linker identifier:

/DEFAULTLIB
/EXPORT
/INCLUDE
/MANIFESTDEPENDENCY
/MERGE
/SECTION
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
18.04.2014, 22:44  [ТС]     Как указать директорию для динамических библиотек #36
А где добавлять? Можно по шагам?
nmcf
4275 / 3706 / 1246
Регистрация: 14.04.2014
Сообщений: 14,500
18.04.2014, 22:57     Как указать директорию для динамических библиотек #37
Где-то в свойствах проекта.
WinRar007
 Аватар для WinRar007
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
19.04.2014, 14:01  [ТС]     Как указать директорию для динамических библиотек #38
Где? Я неделю C++ изучаю!
nmcf
4275 / 3706 / 1246
Регистрация: 14.04.2014
Сообщений: 14,500
19.04.2014, 14:30     Как указать директорию для динамических библиотек #39
Для Visual Studio 2012:
[]http://i57.***********/big/2014/0419/12/385fea0b0acfdeddc994405f5b5d8712.png[/]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 14:36     Как указать директорию для динамических библиотек
Еще ссылки по теме:

C++ Создание динамических библиотек DLL С++
Как лучше копировать память, обмениваться указателями и т.д. при работе с кучей динамических библиотек (DLL) ? C++
Как указать место для сохранения данных в txt C++

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

Или воспользуйтесь поиском по форуму:
nmcf
4275 / 3706 / 1246
Регистрация: 14.04.2014
Сообщений: 14,500
19.04.2014, 14:36     Как указать директорию для динамических библиотек #40
Во вложении.
Миниатюры
Как указать директорию для динамических библиотек  
Yandex
Объявления
19.04.2014, 14:36     Как указать директорию для динамических библиотек
Ответ Создать тему
Опции темы

Текущее время: 23:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru