С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
MrCath
7 / 7 / 1
Регистрация: 08.11.2012
Сообщений: 68
#1

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

24.07.2013, 17:45. Просмотров 1116. Ответов 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 (C++):

Вызов Dll-фий в другой Dll - C++
не получается дернуть dll в другой dll. Подскажите, как должен происходить вызов dll1 в dll2 ? (псевдокод) dll1.cpp { int...

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

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

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

Вызов функции из dll - C++
Привет всем! Пишу программу на Java. Спокойно, форум тот... Моя программа должна работать с устройством, висящим на LPT-порте. Для этого...

Вызов функции с DLL - C++
Сразу говорю пишу программу как и *.dll в VisualStudio 2010. Суть: написал dll, вроде-бы все нормально скомпилировало и удачно создало...

8
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 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 / 2
Регистрация: 26.06.2013
Сообщений: 198
24.07.2013, 19:18 #4
У вас hDll хендл DLL, а ресурсы в EXE
0
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 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 / 2
Регистрация: 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
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.07.2013, 19:53 #8
Возможно, на момент выполнения DllMain хэндл dll-ки еще нельзя использовать.
Но не уверен, нужно проверять эмпирически. В качестве пробы можно сделать так:
запустить из DllMain поток, который сделает паузу, скажем, в одну секунду, чтобы
инициализация DllMain гарантировано успела завершиться, а затем загрузит ресурсы.
0
nxtech
77 / 59 / 2
Регистрация: 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 из подпрограммы - C++
Я сделал dll и вызов функции из мейна основной программы Я хочю, в мейне загрузить саму dll а вызывать функции из других мест программы ...

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

Вызов метода класса из DLL - C++
Добрый вечер. Имеется длл, в которой есть: 1. Класс, содержащий метод 2. Функция, возвращающая объект этого класса Если п.2...

Вызов функции, использующей vector, из dll - C++
Всем привет! Проблема в следующем: есть dll-ка, в ней 3 простых функции: 1. Sum - сложение 2х целых чисел. 2. Concat - соединяет 2...


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

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

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