Помогите начинающему!!!! Asm32
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
Установил ASM32 на WindME, попытался компилировать текст простой консоли. В итоге получил:
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
У нас есть форум по низкоуровневому программированию, перенесу-ка я эту тему туда, может ответят.
Моя личная рекомендация - сноси МЕ и ставь 2000 :)
Установил ASM32 на WindME, попытался компилировать текст простой консоли. В итоге получил:
RC:fotal error RC1110 could not open rsrc.rc
ниже:
CUTRES: for reading Cv 1110 cannot open rsrc.res fo reading.
Ужасно очень сильно прошу объясните что все это значит. Спасибо!
Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
а файл rsrc.res присутствует?
Файлов rsrc.res -22 штуки
------ rsrc.rc -120 тоже штук
пробавал masm32 устанавливать на W98
В тулбаре 1,2,3,4 ...... не нашел нет уменя этого
Результат не меняется.
C:\masm32\bin\ml /c /coff ***.asm
C:\masm32\bin\Link /SUBSYSTEM:CONSOLE ***.obj
Где вместо ***-имя твоего файла, и запусти его из папки с твоей программой.
Ресурсы точно никто не затребует.
Создай такой бат файл
C:\masm32\bin\ml /c /coff ***.asm
C:\masm32\bin\Link /SUBSYSTEM:CONSOLE ***.obj
Где вместо ***-имя твоего файла, и запусти его из папки с твоей программой.
Ресурсы точно никто не затребует.
JhuSS, я очень признателен тебе за участие.
Но ответь пож., что это воабще за хрень такая?
Может стоит все поломать и начать заново?
Я уже долго долблюсь с этим начинанием и постоянно меня преследуют какие-то непонятки и ошибки. Мог бы ты посоветовать с чего начать?
Что бы это было 100% рабочим?
Фаил ресурса rcrc.rc
#include "\masm32\include\resource.h"
600 MENUEX MOVEABLE IMPURE LOADONCALL DISCARDABLE
BEGIN
POPUP "Файл", , , 0
BEGIN
MENUITEM "Открыть",1
MENUITEM "Сохранить_как",2
MENUITEM "", , 0x0800 /*MFT_SEPARATOR*/
MENUITEM "Выход",0
END
POPUP "Функции", , , 0
BEGIN
MENUITEM "f3",3
MENUITEM "f2",4
MENUITEM "f3",5
END
END
Твоя программа: begin.asm
.386
.model flat, stdcall
option casemap :none
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\shell32.inc
include \MASM32\INCLUDE\masm32.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\gdi32.inc
include \MASM32\INCLUDE\comdlg32.inc
includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\comdlg32.lib
WndProc proto :dword,:dword,:dword,:dword
MainWork proto :dword,:dword
show proto :dword,:word
.data?
hWnd dd ?
hMenu dd ?
hInst dd ?
hIcon dd ?
maxX dd ?
maxY dd ?
hDC dd ?
hBitmap dd ?
hBrush dd ?
hMemDC dd ?
hfile dd ?
file_size dd ?
bmi_str dd ?
lpscreen dd ?
hheap dd ?
pmemory dd ?
bif BITMAPFILEHEADER <>
bi BITMAPINFOHEADER <>
rgb RGBQUAD <>
Ps PAINTSTRUCT <>
ofn OPENFILENAME <>
wc WNDCLASSEX <>
msg MSG <>
file_name db 256 dup (?)
work_indikator dw ?
.data
szDisplayName db "BMP",0
szClassName db "bmp_class",0
files_filtr db "bmp Files ",0,"*.bmp",0,"all Files ",0,"*.*",0,0
.code
start: invoke GetModuleHandle,0
mov hInst,eax
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,0
mov wc.cbWndExtra,0
push hInst
pop wc.hInstance
invoke GetStockObject,GRAY_BRUSH
mov wc.hbrBackground,eax
mov wc.lpszMenuName,600
mov wc.lpszClassName,offset szClassName
invoke LoadIcon,hInst,IDI_APPLICATION
mov hIcon,eax
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,0,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
test eax,eax
jz quit_loop
mov ofn.lStructSize,sizeof OPENFILENAME
mov ofn.lpstrFilter,offset files_filtr
mov ofn.nMaxFile,256
mov ofn.lpstrFileTitle,0
mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
OFN_EXPLORER
mov ofn.lpstrDefExt,0
mov ofn.lpstrFile,offset file_name
invoke CreateWindowEx,WS_EX_LEFT,addr szClassName,addr szDisplayName,
WS_OVERLAPPEDWINDOW or WS_VSCROLL or WS_HSCROLL,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,
0,0,hInst,0
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
msg_loop: invoke GetMessage,addr msg,0,0,0
test eax,eax
jz quit_loop
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
jmp msg_loop
quit_loop: mov eax,msg.wParam
invoke ExitProcess,eax
WndProc proc hWin:dword,uMsg:dword,wParam:dword,lParam:dword
mov eax,uMsg
cmp eax,WM_DESTROY
je _wm_destroy
cmp eax,WM_CREATE
je _wm_create
cmp eax,WM_PAINT
je _wm_paint
cmp eax,WM_CLOSE
je _wm_close
cmp eax,WM_COMMAND
je _wm_command
_wm_out: invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
_wm_create: invoke GetSystemMetrics,SM_CXSCREEN
mov maxX,eax
invoke GetSystemMetrics,SM_CYSCREEN
mov maxY,eax
invoke GetDC,hWin
mov hDC,eax
invoke CreateCompatibleDC,hDC
mov hMemDC,eax
invoke CreateCompatibleBitmap,hDC,maxX,maxY
mov hBitmap,eax
invoke SelectObject,hMemDC,hBitmap
invoke GetStockObject,GRAY_BRUSH
mov hBrush,eax
invoke SelectObject,hMemDC,hBrush
invoke PatBlt,hMemDC,0,0,maxX,maxY,PATCOPY
invoke ReleaseDC,hWin,hDC
xor eax,eax
ret
_wm_paint: invoke BeginPaint,hWin,addr Ps
mov hDC,eax
invoke SelectObject,hMemDC,hBitmap
invoke BitBlt,hDC,0,0,maxX,maxY,hMemDC,0,0,SRCCOPY
invoke EndPaint,hWin,addr Ps
xor eax,eax
ret
_wm_command: mov eax,wParam
test eax,eax
jz _wm_close
cmp eax,5
jg _wm_out
invoke MainWork,hWin,wParam
xor eax,eax
ret
_wm_close: invoke MainWork,hWin,3
_wm_destroy: invoke PostQuitMessage,0
xor eax,eax
ret
WndProc endp
MainWork proc hWin:dword,wParam:dword
local buff_data:dword
mov eax,wParam
jmp dword ptr menu_handlers[eax*4]
menu_handlers dd idm_Quit
dd idm_Open
dd idm_Save_as
dd idm_f1
dd idm_f2
dd idm_f3
idm_Open: invoke GetOpenFileNameA,offset ofn
test eax,eax
jz idm_Quit
invoke CreateFileA,offset file_name,GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE,0h
mov hfile,eax
invoke GetFileSize,hfile,0
mov file_size,eax
invoke GetProcessHeap
mov hheap,eax
invoke HeapAlloc,hheap,0,file_size
mov pmemory,eax
invoke ReadFile,hfile,pmemory,file_size,offset file_size,0
invoke CloseHandle,hfile
mov ebx,offset file_name
mov ecx,256
find_point: mov al,[ebx]
cmp al,'.'
je new_fn
inc ebx
loop find_point
new_fn: mov buff_data,ebx
mov ax,'a_'
mov [ebx],ax
inc ebx
inc ebx
mov eax,'pmb.'
mov [ebx],eax
mov work_indikator,0
idm_Quit: ret
idm_Save_as: cmp work_indikator,0
je idm_Quit
mov ofn.Flags,OFN_EXPLORER or OFN_OVERWRITEPROMPT
invoke GetSaveFileNameA,offset ofn
test eax,eax
je idm_Quit
invoke CreateFileA,offset file_name,GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,0h
mov hfile,eax
mov esi,pmemory
mov edi,offset bif
mov ecx,14
_bif_copy: push [edi]
inc edi
pop [esi]
inc esi
loop _bif_copy
mov edi,offset bi
mov ecx,40
_bi_copy: push [edi]
inc edi
pop [esi]
inc esi
loop _bi_copy
invoke WriteFile,hfile,pmemory,file_size,offset file_size,0
invoke CloseHandle,hfile
mov work_indikator,0
ret
idm_f1:
jmp show_work
idm_f2:
jmp show_work
idm_f3:
jmp show_work
show_work:
inc work_indikator
ret
MainWork endp
end start
Большое тебе спасибо за текст, но наверное я забыл сообщить, что я "чайник" в программировании
(даже "чайник" для меня комплемент) и кроме огромного желания я ничего не имею.
Так, что если тебе не трудно чиркни что за программа - ниже "окошка" и с чем ее "едят"?
За ранее спасибо.
Разберу простейший случай. Никаких баров и меню. Добавишь сам в студии и посмотришь что изменилось в проекте. В ходе сего заглянешь блокнотом Rcrc.rc – для уяснения что есть ресурсы. + бат для сборки проекта - makeit.bat. Некоторые макросы m2m и return – найдешь в inc. Invoke – это можно сказать тоже макрос , оный по в обратном порядке все загоняет в стек и делает обращение к функции. Буду комментировать действия программы. Такие штуки как NULL или SW_SHOWDEFAULT – константы определенные в файле windows.inc.
.model flat, stdcall ; 32 bit memory model
option casemap : none ; case sensitive
include Project.inc ; local includes for this file
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax ; - идентификатор создаваемого по программе процесса
invoke GetCommandLine
mov CommandLine, eax ; - указатель на адрес командной строки , здесь можно искать всякие ключи и прочие задаваемые при запуске параметры
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT ; Пережиток Си-шной модульности , можно и так.
invoke ExitProcess,eax ; - выход
WinMain proc hInst: DWORD, ; - сие есть те 4 параметра , оные процедура получает в стеке.
hPrevInst: DWORD,
CmdLine: DWORD,
CmdShow: DWORD
;====================
; Put LOCALs on stack
;====================
LOCAL wc :WNDCLASSEX ; локальные данные процедуры , физически довешиваются к стеку с другой стороны , например сие – описанная в windows.inc структура данных
LOCAL msg: MSG
LOCAL Wwd: DWORD
LOCAL Wht: DWORD
LOCAL Wtx: DWORD
LOCAL Wty: DWORD
;==================================================
; Fill WNDCLASSEX structure with required variables
;==================================================
invoke LoadIcon,hInst,500 ; icon ID - увидишь сие число в файле ресурсов как определитель иконки
mov hIcon, eax
szText szClassName,"Project_Class"
mov wc.cbSize, sizeof WNDCLASSEX ; Заполнение структуры параметрами , в винде почти все через всевозможные структуры.
mov wc.style, CS_HREDRAW or CS_VREDRAW \
or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc ; -важно- указатель на процедуру обслуживания сообщений окна
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInst
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
m2m wc.hIcon, hIcon
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
m2m wc.hIconSm, hIcon
invoke RegisterClassEx, ADDR wc ; - регистрация класса твоего окна в системе , addr это такой offset для обращения от сегмента кода , т.е. когда структура локальна.
;================================
; Centre window at following size
;================================
mov Wwd, 500 ; задаем размеры окна и судя по тому , что делает TopXY – размещаем его в центре экрана монитора.
mov Wht, 350
invoke GetSystemMetrics,SM_CXSCREEN
invoke TopXY,Wwd,eax
mov Wtx, eax
invoke GetSystemMetrics,SM_CYSCREEN
invoke TopXY,Wht,eax
mov Wty, eax
invoke CreateWindowEx,WS_EX_LEFT, ; создаем в системе объект окна зарегистрированного нами выше класса
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
Wtx,Wty,Wwd,Wht,
NULL,NULL,
hInst,NULL
mov hWnd,eax
invoke LoadMenu,hInst,600 ; menu ID – зачем то грузим меню (ошибка сих микростудий , меню здесь нет ) , кстати потом увидишь в ресурсах сие меню - 600
invoke SetMenu,hWnd,eax ; написав еще одно меню в ресурсах , допустим 601, этой командой можно поменять меню окна.
invoke ShowWindow,hWnd,SW_SHOWNORMAL ; выводим окно на экран.
invoke UpdateWindow,hWnd
;===================================
; Loop until PostQuitMessage is sent
;===================================
StartLoop: ; - сие бесконечный цикл перекидывания сообщений системы в нашу форточку. Пока GetMessage не даст ошибку(еах=0), что обеспечивает окну постоянное висение в системе.
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
return msg.wParam
WinMain endp
uMsg : DWORD, ; - само сообщение
wParam : DWORD, ; параметры пришедшие с сообщением , создашь меню – поймешь какие.
lParam : DWORD
LOCAL var : DWORD
LOCAL caW : DWORD
LOCAL caH : DWORD
LOCAL Rct : RECT
LOCAL hDC : DWORD
LOCAL Ps : PAINTSTRUCT
.if uMsg == WM_COMMAND ; - ну тут даже подписали что здесь будет
;======== menu commands ========
.elseif uMsg == WM_CREATE ; - приходит при открытии окна , хочешь что сделать в сей момент - сюда
.elseif uMsg == WM_SIZE ; - сюда при изменении размеров окна
.elseif uMsg == WM_PAINT ; - перерисовка изображения окна , когда оно выныривает из под других окон.
invoke BeginPaint,hWin,ADDR Ps
mov hDC, eax
invoke Paint_Proc,hWin,hDC
invoke EndPaint,hWin,ADDR Ps
return 0
.elseif uMsg == WM_CLOSE ; сообщение - а напоследок я скажу….
szText TheText,"Please Confirm Exit"
invoke MessageBox,hWin,ADDR TheText,ADDR szDisplayName,MB_YESNO ; - окно сообщения «в натуре ?» о закрытии.
.if eax == IDNO
return 0
.endif
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL А это то что шлет ошибку в вышеописанный бесконечный цикл
return 0
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam ; то чего не переварим – нехай переваривает система сама. Путь для необработанных сообщений , а их тьма…
ret
WndProc endp
shr sDim, 1 ; divide screen dimension by 2
shr wDim, 1 ; divide window dimension by 2
mov eax, wDim ; copy window dimension into eax
sub sDim, eax ; sub half win dimension from half screen dimension
return sDim
TopXY endp
Paint_Proc proc hWin: DWORD, hDC: DWORD
LOCAL btn_hi : DWORD
LOCAL btn_lo : DWORD
LOCAL Rct : RECT
invoke GetSysColor,COLOR_BTNHIGHLIGHT
mov btn_hi, eax
invoke GetSysColor,COLOR_BTNSHADOW
mov btn_lo, eax
return 0
Paint_Proc endp
end start
Пришли приватом свой почтовый ящик.
JhuSS,привет!
Несколько дней, почему-то, "коденет" был недоступен, теперь вот пишу.
Твою инфу скопировал - буду пережовывать.
Хочу сообшить (я имею опыт в электроннике т.е.
схемы,железо и т.п. может на что сгожусь.
Юрий. [email]yrmih77@mail.ru[/email]
JhuSS,привет!
Несколько дней, почему-то, "коденет" был недоступен, теперь вот пишу.
Твою инфу скопировал - буду пережовывать.
Хочу сообшить (я имею опыт в электроннике т.е.
схемы,железо и т.п. может на что сгожусь.
Юрий. [email]yrmih77@mail.ru[/email]
Во-первых читать надо уроки Iczelion'a - если у тебя в дистрибе masm32 нема - google рулит - это классика.
Во вторых совет - лучше не свети свое мыло на форумах - потом будет приходить куча спама. :(