Загрузка битмапов из ресурсов dll.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Загрузка битмапов из ресурсов dll.

Сообщение Денис » 03.12.2008 (Ср) 11:18

Поиском пользовался. Нашел несколько топиков (например, этот), но ничего не понял по существу вопроса.
Итак, вопрос:
Есть библиотека system32\cards.dll в ней, в ресурсах, лежат битмапы карт игровой колоды, рубашки, иконки и пр. Хочется загружать их в объекты Image (IPictureDisp в общем).
Делаю так (Используя код от HiSER):
Код: Выделить всё
Dim lib As Long
Dim ri As Long
Dim rd As Long
Dim hfile As Long
Dim wb As Long
Dim Pic As IPictureDisp

lib = LoadLibrary("c:\windows\system32\cards.dll")
Debug.Print "lib:", lib

ri = FindResource(lib, "#1", "BITMAP")
Debug.Print "ri:", ri

rd = LoadResource(lib, ri)
Debug.Print "rd:", rd

CopyMemory Pic, rd, SizeofResource(lib, ri)
Debug.Print "size:", SizeofResource(lib, ri)

img1.Picture = Pic

FreeLibrary lib

Но, ничего не грузится! Immediate говорит:
Код: Выделить всё
lib:           1880752128
ri:            0
rd:            0
size:          0


Тоесть, даже до CopyMemory ни байта не доходит. Одни нули.
Где ошибка?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Загрузка битмапов из ресурсов dll.

Сообщение alibek » 03.12.2008 (Ср) 13:43

Что значит #1?
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка битмапов из ресурсов dll.

Сообщение Денис » 03.12.2008 (Ср) 13:48

Это вопрос к HiSER'у (первая (и большая) часть кода его). Я пробовал убирать знак # — ничего не меняется. Нули.
... а, и да, это означает, как я понимаю, "ресурс под номером 1 (один)", если смотреть через запятую, то получаем: "ресурс под номером 1 (один) в секции BITMAP".
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Загрузка битмапов из ресурсов dll.

Сообщение alibek » 03.12.2008 (Ср) 14:56

У тебя не "номер 1", у тебя строка "#1".
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Загрузка битмапов из ресурсов dll.

Сообщение iGrok » 03.12.2008 (Ср) 15:01

А ты попробуй #14, а не #1..

Чисто ради интереса - что получится?

Просто у меня Restorator про ресурсы с первого по 13 говорит, что Bitmap Is Corrupt. Там вытащить удаётся только 20 карт и обложки. (

И, если тебя интересуют именно карты из Cards.dll, а не какие-нить другие ресурсы.. Может, функции Cards.dll заюзать?
Которые cdtInit, cdtDraw, cdtDrawExt, cdtAnimate, cdtTerm..
http://www.winehq.org/pipermail/wine-de ... 18954.html
label:
cli
jmp label

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Загрузка битмапов из ресурсов dll.

Сообщение iGrok » 03.12.2008 (Ср) 15:16

alibek писал(а):У тебя не "номер 1", у тебя строка "#1".

Правильно. Там и должна быть строка "#1"

http://msdn.microsoft.com/en-us/library/ms648042(VS.85).aspx
label:
cli
jmp label

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка битмапов из ресурсов dll.

Сообщение Денис » 03.12.2008 (Ср) 16:44

iGrok писал(а):А ты попробуй #14, а не #1.

Нули.
alibek писал(а):У тебя не "номер 1", у тебя строка "#1".

Строка "#1" означает передачу в виде текста параметра, который может принимать как текстовые, так и числовые значения, и то, что в данный момент передается числовое значение. Символ # указывает на это.
Хотя, зачем я тебе это объясняю, ты ведь и так это знаешь?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Загрузка битмапов из ресурсов dll.

Сообщение iGrok » 03.12.2008 (Ср) 18:54

Короче, таких траблов в гугле навалом. Кому-то помогает RT_BITMAP вместо "Bitmap".
У меня получилось так hBitmap = LoadBitmap(lib, "#1"). Далее уже из этого можно заполучить IPictureDisp. Ну или оставить как есть. )
FindResource у меня битмапы упорно не видел нигде. Другие ресурсы - находил. Но и то не все. Меню, диалоги тоже не получилось.

Вот тут что-то по теме:
http://www.asmcommunity.net/board/index ... ic=6949.15

An application can use FindResource to find any type of resource, but this function should be used only if the application must access the binary resource data when making subsequent calls to LockResource.

To use a resource immediately, an application should use one of the following resource-specific functions to find and load the resources in one call.

Т.е. в принципе, оно ДОЛЖНО работать. Но они сами же рекомендуют пользовать для этого спец. ф-ции.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Загрузка битмапов из ресурсов dll.

Сообщение Хакер » 03.12.2008 (Ср) 22:29

Денис, правильно использовать катрежные функции, а не работать с ресурсами напрямую.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Загрузка битмапов из ресурсов dll.

Сообщение Денис » 04.12.2008 (Чт) 9:22

Да.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 97

    TopList