Эта программа при компиляции в fasm v1.67 не работает. В том смысле, что когда я смотрю ее под ollydbg GetObject вместо того, чтобы записать структуру BITMAP и вернуть 0x18, она ничего не делает и возвращает 0. Аналогичная программа на си, в вижуал студии работает на ура. Хочу добавить, что в фасме GetObject иногда работает Код (Text): format PE GUI 4.0 include '..\include\win32a.inc' invoke LoadImage,0,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE mov [hbmp],eax invoke GetObject,[hbmp],sizeof.BITMAP,bm ret FileName db 'cards\01.bmp',0 hbmp dd ? bm BITMAP data import library user32,'USER32',\ gdi32,'GDI32';,\ include '..\include\api\user32.inc' include '..\include\api\gdi32.inc' end data Код, который чудом работает. Причем, если там добавить Sleep, то GetObject работает / не работает в зависимости от его параметра... Код (Text): invoke GetDC,0 mov [hdc],eax invoke CreateCompatibleDC,[hdc] mov [hmemdc],eax invoke LoadImage,0,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE mov [hbmp],eax invoke SelectObject,[hmemdc],[hbmp] invoke GetObject,[hbmp],sizeof.BITMAP,bm Прошу помочь разобраться, как заставить GetObject работать стабильно или объяснить, что я делаю / понял неправильно. Спасибо.
lord Kelvin В отладчике надо смотреть внимательнее. Баг может быть где угодно: LoadImage не загружает картинку. Переменная bm не доступна на запись. Формат структуры BITMAP обьявлен неправильно. Размер sizeof.BITMAP задан неправильно.
sizeof.BITMAP, как надо 0x18. GetLastError возвращает 0 - без ошибок. Мое упущение, что не сказал. bm на запись открыта, но я перепроверю. Спасибо!
Я попробовал использовать структуру, место под которую выделенно в стеке и все заработало стабильно. Quantum, n0name большое спасибо за желание помочь и быструю реакцию.
lord Kelvin Получается, что перед bm BITMAP не хватало align 4 (строка 'cards\01.bmp' портит выравнивание). Странно.