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

Вызов dll ресурсов в dll - C++

Восстановить пароль Регистрация
 
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
24.07.2013, 17:45     Вызов dll ресурсов в dll #1
Помогите пожалуйста, вот такого рода проблемка вышла:
Есть у меня dll и есть необходимость вызвать ресурс в потоке dll файла, который создается при подключении. Ресурс объявляю как обычно это делаю в exe проектах: выбираю создать ресурс, выбираю файл, в resource.h беру ID ресурса, а сам .h инклюдом подключаю. При попытке проверить ресурс функцией FindResource. Передаю ей модуль (получаю из DllMain), MAKEINTRESOUCRE(ID_ресурса), тип RT_RCDATA (тип ресурса соответственно такой).

Возврат 1813... В exe проектах все прекрасно, но в dll ну никак не идет... Есть какое-то шаманство заклинания dll, которое отлично от заклинания exe?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14183 / 6198 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 1
24.07.2013, 18:03     Вызов dll ресурсов в dll #2
Цитата Сообщение от MrCath Посмотреть сообщение
вызвать ресурс в потоке dll файла, который создается при подключении.
Можете объяснить более четко ?
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
24.07.2013, 18:58  [ТС]     Вызов dll ресурсов в dll #3
Убежденный, ок ок.
Пробовал убрать все примудрости и создание потоков из главного потока (что бы прям на готовом модуле попробовать), но все равно не получается.
При подключении Dll к приложению открывается поток DllMain:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool WINAPI DllMain(HMODULE hDll, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
    case DLL_PROCESS_ATTACH:
 
                      //Все инклюды подключены, в том числе и заголовочный файл ресурсов (resource.h)
 
                     //Для примера, я здесь пробую найти ресурс
                     FindResource(hDll, MAKEINTRESOURCE(ID_ресурса), RT_RCDATA);
 
              //Тут создается поток, который уже начинает делать то, что 
                      //мне нужно и где-то там мне нужно использовать ресурс.
    break;
    }
 
    return true;
}
FindResource возвращает ошибку 1813, тоже самое если попробовать использовать ресурс без проверки FindResource, тоесть 1813 при любых манипуляциях с ресурсами
Вообще, модуль я получаю тем, что создаю глобальную переменную и в нею копирую hDll в этом потоке. Способ создания ресурса я уже описал... Помогите
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 19:18     Вызов dll ресурсов в dll #4
У вас hDll хендл DLL, а ресурсы в EXE
Убежденный
Системный программист
 Аватар для Убежденный
14183 / 6198 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 1
24.07.2013, 19:28     Вызов dll ресурсов в dll #5
Нельзя создавать потоки в DllMain.
Вообще, в этой функции должна быть минимальная инициализация и только,
никаких загрузок ресурсов, синхронизации и тому подобного.
Иначе может случиться все, что угодно - от ошибок и зависаний до
непонятного поведения.

Ссылки по теме:
Dll entry point
Best Practices for Creating DLLs
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 19:30     Вызов dll ресурсов в dll #6
И еще ссылки FindResource
Конкретно вот это hModule [in, optional]
Type: HMODULE
A handle to the module whose portable executable file or an accompanying MUI file contains the resource. If this parameter is NULL, the function searches the module used to create the current process.
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
24.07.2013, 19:33  [ТС]     Вызов dll ресурсов в dll #7
Цитата Сообщение от nxtech Посмотреть сообщение
У вас hDll хендл DLL, а ресурсы в EXE
Нет, ресурсы в DLL моей.
Цитата Сообщение от Убежденный Посмотреть сообщение
Нельзя создавать потоки в DllMain.
Вообще, в этой функции должна быть минимальная инициализация и только,
никаких загрузок ресурсов, синхронизации и тому подобного.
Иначе может случиться все, что угодно - от ошибок и зависаний до
непонятного поведения.
Я это прекрасно понимаю, тут дело в том, что подключаю я dll не к своей программе, что бы я мог её загрузить через LoadLibrary и ковыряться с ней... Поэтому длл создает потоки в которых я выполняю то, что мне нужно.
Убежденный
Системный программист
 Аватар для Убежденный
14183 / 6198 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 1
24.07.2013, 19:53     Вызов dll ресурсов в dll #8
Возможно, на момент выполнения DllMain хэндл dll-ки еще нельзя использовать.
Но не уверен, нужно проверять эмпирически. В качестве пробы можно сделать так:
запустить из DllMain поток, который сделает паузу, скажем, в одну секунду, чтобы
инициализация DllMain гарантировано успела завершиться, а затем загрузит ресурсы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 20:01     Вызов dll ресурсов в dll
Еще ссылки по теме:

C++ Вызов Dll-фий в другой Dll
Как записать dll из ресурсов в нужную директорию? C++
Вызов dll из подпрограммы C++

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

Или воспользуйтесь поиском по форуму:
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 20:01     Вызов dll ресурсов в dll #9
Цитата Сообщение от MrCath Посмотреть сообщение
Нет, ресурсы в DLL моей.
Ну, значит я не правильно это понял:
Цитата Сообщение от MrCath Посмотреть сообщение
Ресурс объявляю как обычно это делаю в exe проектах
Убежденный, навряд ли.
Yandex
Объявления
24.07.2013, 20:01     Вызов dll ресурсов в dll
Ответ Создать тему
Опции темы

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