Ресурсы и код в DLL

Тема в разделе "WASM.BEGINNERS", создана пользователем MasmDX, 18 июл 2009.

  1. MasmDX

    MasmDX New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2009
    Сообщения:
    3
    Помогите разобраться с ресурсами в DLL. Пишу на masm32.

    Есть ехе-шник с ресурсами. С помощью LoadLibrary подгружаю библиотеку (в ней тоже есть ресурсы). При попытке загрузить ресурс из длл (картинку, диалог и т.п.) она не подгружается, либо подгружается ресурс с таким же именем из ехе. FindResource не находит нужный ресурс (точнее ищет в ехе, а не в dll).
    В инете нашел только описание функции AfxSetResourceHandle из С++ которая может переключить. В мсдн описывается функция SetResourceHandler, но так и не нашел в какой библиотеке она находится.

    Помогите разобраться как правильно извлекать ресурсы из длл.

    invoke FindResource,hModule,addr BitmapName,100

    Загрузка длл:

    Код (Text):
    1. invoke LoadLibrary,addr dll
    2.                 mov hModule,eax
    3.                 invoke GetProcAddress,hModule,addr Func
    4.                 mov addrFunc,eax
    5.                
    6.                 push hModule
    7.                 call addrFunc
    Извлечение ресурса:

    Код (Text):
    1. invoke FindResource,hModule,addr BitmapName,100
    2.  
    3.     ;   invoke LoadBitmap,hModule,addr BitmapName
    4. invoke LoadBitmap,hModule,100
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    MasmDX
    > подгружается ресурс с таким же именем из ехе
    AFAIK такое возможно, если в качестве hModule указана база exe'шника.

    > FindResource,hModule,addr BitmapName,100
    Третим параметром FindResource указывают тип ресурса, 100 - это тип?

    > мсдн описывается функция SetResourceHandler
    Согласно msdn этой функции нет в win32, см. msdn. Deleted Windows Programming Elements.

    Пример в аттаче.
    В ресурсах dll'ки один bitmap - идентификатор 2000.
    В ресурсах exe'шника два bitmap'а - идентификаторы 2000 и 2001.
    Программа пытается загрузить из dll'ки и из exe'шника bitmap'ы с идентификаторами 2000 и 2001 и показать их в диалоге. Результат - из dll'ки грузится только 2000, а из exe'шника и 2000, и 2001.
     
  3. MasmDX

    MasmDX New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2009
    Сообщения:
    3
    Спасибо за пример! Разобрался))

    В своей проге заменил
    invoke LoadBitmap,hModule,addr BitmapName

    на
    invoke LoadBitmap,hModule,100

    и все заработало. )