![]() |
|
|
![]()
|
|
| GoRam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.8.2008 Репутация: нет Всего: 1 |
Всем привет. У меня такая проблемма, мне нужно загрузить ресырсы из DLL библиотеки, в ней есть 3 картинки IDB_BMP1 IDB_BMP2 IDB_BMP3. можно ли загрузить их так, чтобы я мог к ним обращаться как к стандартным ресурсам программы, просто у меня есть функчия которая просит чтобы ей передали картинку из ресурсов, а как загрузить из DLL чтобы передать не знаю.
Вот сама функция void SetBitmaps(UINT nBmp1, UINT nBmp2) вызываю так m_bm.SetBitmaps(IDB_BITMAP1, IDB_BITMAP2); при подключении и загрузки библиотеки пишу m_bm.SetBitmaps(IDB_BMP1, IDB_BMP2); вылетает с ошибкой типа нету IDB_BMP1 и IDB_BMP2 |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
Не знаю насчет MFC, но в WinAPI функции вроде LoadIcon, LoadCursor и т. д. принимают в качестве первого параметра HMODULE, т.е. например загруженную библиотеку. Не вижу ничего дурного в том, чтобы загружать ресурсы через WinAPI, а затем оборачивать в классы MFC.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Чтобы остаться в рамках MFC, можно временно установить нужный модуль ресурсов вызовом
AfxSetResourceHandle (hDll). Перед этим сохрани текущий модуль ресурсов (AfxGetResourceHandle() его возвращает), чтобы потом вернуть на место. Лучше всего это дело обернуть в класс по принципу RAII:
MFC ищет ресурсы так: сначала в модуле, который установлен как resourse module, потом в EXE и по всей цепочке extension DLL. Вышеприведенным кодом ты временно изменяешь порядок поиска. Причем, если у тебя все ресурсы имеют уникальные номера и DLL типа extension, то все это делать не надо - и так найдутся. Другое дело, что в больших проектах поддерживать уникальность ресурсов довольно утомительно, вот тогда можно временно переключать resourse handle. Или если DLL имеет тип regular - тоже придется переключать. -------------------- ... |
|||
|
||||
| GoRam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.8.2008 Репутация: нет Всего: 1 |
большое спасибо за то что объяснили
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |