Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
#1

Вызов dll ресурсов в dll

24.07.2013, 17:45. Просмотров 1183. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста, вот такого рода проблемка вышла:
Есть у меня dll и есть необходимость вызвать ресурс в потоке dll файла, который создается при подключении. Ресурс объявляю как обычно это делаю в exe проектах: выбираю создать ресурс, выбираю файл, в resource.h беру ID ресурса, а сам .h инклюдом подключаю. При попытке проверить ресурс функцией FindResource. Передаю ей модуль (получаю из DllMain), MAKEINTRESOUCRE(ID_ресурса), тип RT_RCDATA (тип ресурса соответственно такой).

Возврат 1813... В exe проектах все прекрасно, но в dll ну никак не идет... Есть какое-то шаманство заклинания dll, которое отлично от заклинания exe?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2013, 17:45
Ответы с готовыми решениями:

Вызов Dll-фий в другой Dll
не получается дернуть dll в другой dll. Подскажите, как должен происходить...

Вызов dll из dll -> request example
Вызывающий код void (*dllHelloWorld) (void); //ok LPCTSTR s =...

Как вытащить DLL файлы из ресурсов?
Zdras`te!!! Ya v C++ novichok, i u menya est` vopros(ento istestvenno;): Kak...

Как записать dll из ресурсов в нужную директорию?
Привет!) Как можно записать .длл из ресурсов на ПК в нужную директорию?

Вызов dll из подпрограммы
Я сделал dll и вызов функции из мейна основной программы Я хочю, в мейне...

8
Убежденный
Ушел с форума
Эксперт С++
15950 / 7262 / 1177
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.07.2013, 18:03 #2
Цитата Сообщение от MrCath Посмотреть сообщение
вызвать ресурс в потоке dll файла, который создается при подключении.
Можете объяснить более четко ?
0
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
24.07.2013, 18:58  [ТС] #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 в этом потоке. Способ создания ресурса я уже описал... Помогите
0
nxtech
77 / 59 / 9
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 19:18 #4
У вас hDll хендл DLL, а ресурсы в EXE
0
Убежденный
Ушел с форума
Эксперт С++
15950 / 7262 / 1177
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.07.2013, 19:28 #5
Нельзя создавать потоки в DllMain.
Вообще, в этой функции должна быть минимальная инициализация и только,
никаких загрузок ресурсов, синхронизации и тому подобного.
Иначе может случиться все, что угодно - от ошибок и зависаний до
непонятного поведения.

Ссылки по теме:
Dll entry point
Best Practices for Creating DLLs
0
nxtech
77 / 59 / 9
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 19:30 #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.
0
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
24.07.2013, 19:33  [ТС] #7
Цитата Сообщение от nxtech Посмотреть сообщение
У вас hDll хендл DLL, а ресурсы в EXE
Нет, ресурсы в DLL моей.
Цитата Сообщение от Убежденный Посмотреть сообщение
Нельзя создавать потоки в DllMain.
Вообще, в этой функции должна быть минимальная инициализация и только,
никаких загрузок ресурсов, синхронизации и тому подобного.
Иначе может случиться все, что угодно - от ошибок и зависаний до
непонятного поведения.
Я это прекрасно понимаю, тут дело в том, что подключаю я dll не к своей программе, что бы я мог её загрузить через LoadLibrary и ковыряться с ней... Поэтому длл создает потоки в которых я выполняю то, что мне нужно.
0
Убежденный
Ушел с форума
Эксперт С++
15950 / 7262 / 1177
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.07.2013, 19:53 #8
Возможно, на момент выполнения DllMain хэндл dll-ки еще нельзя использовать.
Но не уверен, нужно проверять эмпирически. В качестве пробы можно сделать так:
запустить из DllMain поток, который сделает паузу, скажем, в одну секунду, чтобы
инициализация DllMain гарантировано успела завершиться, а затем загрузит ресурсы.
0
nxtech
77 / 59 / 9
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 20:01 #9
Цитата Сообщение от MrCath Посмотреть сообщение
Нет, ресурсы в DLL моей.
Ну, значит я не правильно это понял:
Цитата Сообщение от MrCath Посмотреть сообщение
Ресурс объявляю как обычно это делаю в exe проектах
Убежденный, навряд ли.
0
24.07.2013, 20:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 20:01

Вызов функции с DLL
Сразу говорю пишу программу как и *.dll в VisualStudio 2010. Суть: написал...

Вызов управляемой DLL
Приветствую. Только-только начал учить С++, поэтому прошу прощения заранее,...

Вызов функции из dll
Привет всем! Пишу программу на Java. Спокойно, форум тот... Моя программа...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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