Задача: прочитанный из файла битмап вывести на десктоп. Среда: masm v7. ВОПРОС: ПОЧЕМУ ВЫДАЕТ ОШИБКУ SelectObject,mDC,mBM? (остальное выполняется нормально) Исходник: Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\gdi32.lib .data fName db 'pilot.bmp',0 .data? hdc dd ? fHan dd ? fSiz dd ? memP dd ? mDC dd ? mBM dd ? .code start: invoke _lopen,addr fName,OF_READ mov fHan,eax invoke GetFileSize,fHan,0 mov fSiz,eax invoke GlobalAlloc,0,fSiz mov memP,eax invoke _lread,fHan,memP,fSiz invoke CloseHandle,fHan invoke GetDC,0 mov hdc,eax invoke CreateCompatibleDC,hdc mov mDC,eax push esi mov esi,[memP] add esi,[esi+10] push esi ;Bits mov esi,[memP] xor eax,eax mov ax,word ptr [esi+28] ;BitCount push eax mov ax,word ptr [esi+26] ;Planes push eax push [esi+22] ;Height push [esi+18] ;Width call CreateBitmap mov mBM,eax pop esi invoke SelectObject,mDC,mBM invoke BitBlt,hdc,0,0,63,71,mDC,0,0,SRCCOPY invoke DeleteObject,mBM invoke DeleteDC,mDC invoke ReleaseDC,0,hdc invoke GlobalFree,memP invoke ExitProcess,0 end start
LoadImage(...LR_LOADFROMFILE) GetObject (получишь размеры битмапа) CreateCompatibleDC SelectObject mov hObjOld,eax BitBlt SelectObject,... hObjOld ...
Битмап создаем функцией CreateBitmap, dc получаем CreateCompatibleDC. Почему SelectObject dc, <созданный битмап> выдает ошибку?
А почему не читаете MSDN -> CreateBitmap -> Remarks ? Вот только отрывок: "Whenever a color bitmap returned from CreateBitmap is selected into a device context, the system checks that the bitmap matches the format of the device context it is being selected into".