SuCkEr Posted December 15, 2006 Posted December 15, 2006 hi all i create a small app just for a test i don't why he got a crashes when write to file .dataFILENAME DB "key.lic",0.data?hInstance HINSTANCE ? read db ?write db ?.constIDD_DLG1 equ 1000IDC_BTN1 equ 1001IDC_EDT1 equ 1002DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM .if uMsg == WM_INITDIALOG invoke SendMessage, hWnd, WM_SETICON, 1, eax .elseif uMsg == WM_COMMAND mov eax,wParam .if eax==IDC_BTN1 invoke CreateFile,ADDR FILENAME,GENERIC_READ+GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL invoke GetDlgItemText,1000,1002,addr read,512 invoke SetFilePointer,addr FILENAME,0,0,FILE_BEGIN invoke WriteFile,addr FILENAME,addr read,32,32,NULL POP EAX invoke CloseHandle, eax .elseif uMsg == WM_CLOSE invoke EndDialog, hWnd, 0 invoke ExitProcess,0 .endif.endif xor eax,eax RetDlgProc EndPend start is there any suggest or advice?
starzboy Posted December 15, 2006 Posted December 15, 2006 hello ... since its a single line work ... i suggest u do this :.data?hdir db 256 dup(?)htemp dd ?invoke GetDlgItemText,hWnd,IDC_EDT1,addr read,512 ; Copy value from Editbox to buffer [read] invoke GetCurrentDirectory,sizeof hdir ,addr hdir ; Get Current Directory invoke lstrcat,addr hdir,offset FILENAME invoke CreateFile,addr hdir,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 ; File Attributes push eax invoke WriteFile,eax,addr read,sizeof read,addr htemp,0 ; WrireFile pop eax invoke CloseHandle,eax ; CloseHandle
Ox87k Posted December 15, 2006 Posted December 15, 2006 i think the error is here:invoke WriteFile,addr FILENAME,addr read,32,32,NULLmaybe it would be:dwBytesWritten dw 0invoke lstrlen, addr readinvoke WriteFile, addr FILENAME, addr read, eax, addr dwBytesWritten, NULL:-|
sEby Posted December 15, 2006 Posted December 15, 2006 (edited) first mistake is here: invoke GetDlgItemText,1000,1002,addr read,512 and sould be: invoke GetDlgItemText,hWnd,1002,addr read,512 second invoke SetFilePointer,addr FILENAME,0,0,FILE_BEGIN from win32api help file The SetFilePointer function moves the file pointer of an open file. DWORD SetFilePointer( HANDLE hFile, // handle of file LONG lDistanceToMove, // number of bytes to move file pointer PLONG lpDistanceToMoveHigh, // address of high-order word of distance to move DWORD dwMoveMethod // how to move ); ParametershFileIdentifies the file whose file pointer is to be moved. The file handle must have been created with GENERIC_READ or GENERIC_WRITE access to the file. lDistanceToMoveSpecifies the number of bytes to move the file pointer. A positive value moves the pointer forward in the file and a negative value moves it backward. lpDistanceToMoveHighPoints to the high-order word of the 64-bit distance to move. If the value of this parameter is NULL, SetFilePointer can operate only on files whose maximum size is 2^32 - 2. If this parameter is specified, the maximum file size is 2^64 - 2. This parameter also receives the high-order word of the new value of the file pointer. dwMoveMethodSpecifies the starting point for the file pointer move. This parameter can be one of the following values: Value MeaningFILE_BEGIN The starting point is zero or the beginning of the file. If FILE_BEGIN is specified, DistanceToMove is interpreted as an unsigned location for the new file pointer.FILE_CURRENT The current value of the file pointer is the starting point.FILE_END The current end-of-file position is the starting point. third: invoke WriteFile,addr FILENAME,addr read,32,32,NULL from the same document ... The WriteFile function writes data to a file and is designed for both synchronous and asynchronous operation. The function starts writing data to the file at the position indicated by the file pointer. After the write operation has been completed, the file pointer is adjusted by the number of bytes actually written, except when the file is opened with FILE_FLAG_OVERLAPPED. If the file handle was created for overlapped input and output (I/O), the application must adjust the position of the file pointer after the write operation is finished. BOOL WriteFile( HANDLE hFile, // handle to file to write to LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O ); ParametershFile...... the rest findit ..... Edited December 15, 2006 by seby
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now