Ecco qui il codice. Uso Masm 8 32bit con relative librerie.
tutto va ok finchè non leggo un file. Allora la funzione ReadFile non funge. PErchè???
Aiuto, please.
Ecco il codice::ometto quello relativo al menù...basti sapere che ci sono due possibilità: esci e open. con open si apre la finestra di scelta del file eccetera. [IDM_OPEN])
.386
.model flat,stdCall
option casemap:none
WinMain PROTO WORD,WORD,WORD,WORD
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comdlg32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comdlg32.lib
.data
ErrPos db "Errore nel posizionamento",0
ErrRead db "Errore nella Lettura",0
MainMenu db "MainMenu",0
MainClass db "MainWnd",0
MainName db "PRINCIPALE",0
Filtro db "Tutti",0,"*.*",0
db "*.Txt",0,"*.txt",0,0
EditClass db "edit",0
Abilitato db "Il tasto Funziona...",0
Deb db "ROutine di Debug",0
.data?
ofn OPENFILENAME <>
hFile HANDLE ?
Edithwnd HWND ?
hInstance HINSTANCE ?
CommandLine LPSTR ?
Buffer db 201 dup(?)
FileName db 301 dup (?)
File db 501 dup (?)
hMemory HANDLE ?
pMemory DWORD ?
Counter DWORD ?
.const
IDM_EXIT equ 32001
IDM_OPEN equ 32002
IDEdit equ 3001
.code
main:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,PrevhInst:HINSTANCE,Cmd:LPSTR,CmdS howWORD
LOCAL wc : WNDCLASSEX
LOCAL hWnd : HWND
LOCAL msg : MSG
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset MainWndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
mov wc.hbrBackground,COLOR_BTNFACE
mov wc.lpszMenuName,offset MainMenu
mov wc.lpszClassName,offset MainClass
invoke RegisterClassEx,addr wc
invoke CreateWindowEx,NULL,offset MainClass,offset MainName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USED EFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInst ance,NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
.WHILE TRUE
invoke GetMessage,addr msg,hWnd,NULL,NULL
.BREAK .IF (!eax)
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
MainWndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
invoke CreateWindowEx,NULL,offset EditClass,NULL,WS_CHILD or WS_VISIBLE or ES_MULTILINE or ES_AUTOVSCROLL or ES_LEFT or ES_WANTRETURN,NULL,NULL,NULL,NULL,hWnd,IDEdit,hIns tance,NULL
mov Edithwnd,eax
mov ofn.lStructSize,SIZEOF ofn
push hWnd
pop ofn.hwndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter,offset Filtro
mov ofn.lpstrFile,offset File
mov ofn.nMaxFile,400
mov ofn.lpstrFileTitle,offset FileName
mov ofn.nMaxFileTitle,300
mov ofn.lpstrInitialDir,NULL
mov ofn.lpstrTitle,NULL
mov ofn.lCustData,NULL
mov ofn.lpfnHook,NULL
mov ofn.lpTemplateName,NULL
.ELSEIF uMsg==WM_SIZE
mov eax,lParam
mov edx,eax
and eax,0ffffh
shr edx,16
invoke MoveWindow,Edithwnd,0,0,eax,edx,TRUE
invoke SetFocus,Edithwnd
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF lParam==NULL
.IF ax==IDM_EXIT
invoke SendMessage,hWnd,WM_DESTROY,NULL,NULL
.ELSEIF ax==IDM_OPEN
mov ofn.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or OFN_EXPLORER or OFN_LONGNAMES
invoke GetOpenFileName,addr ofn
.IF eax==TRUE
invoke CreateFile,offset File,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE _ARCHIVE,NULL
mov hFile,eax
invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,500
mov hMemory,eax
invoke GlobalLock,hMemory
mov pMemory,eax
invoke SetFilePointer,hFile,NULL,NULL,FILE_BEGIN
invoke ReadFile,hFile,pMemory,200,offset Counter,NULL
invoke SendMessage,Edithwnd,WM_SETTEXT,NULL,pMemory
invoke GlobalUnlock,pMemory
invoke GlobalFree,hMemory
invoke CloseHandle,hFile
mov Counter,NULL
mov hFile,NULL
mov pMemory,NULL
mov hMemory,NULL
.ENDIF
invoke SetFocus,Edithwnd
.ENDIF
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
MainWndProc endp
end main