· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› WriteFile глючит?

Посл.отвђт Сообщенiе


Дата: Авг 3, 2004 03:25:15 · Поправил: Asterix

Не могу понять почему строка не пишется в файл..
format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'


section '.code' code readable writeable executable

align 4
start:
  invoke CreateFile, FileName, GENERIC_WRITE,\
                     FILE_SHARE_READ, 0, CREATE_ALWAYS,\
                     FILE_ATTRIBUTE_NORMAL, 0
  cmp eax, INVALID_HANDLE_VALUE
  je @exit
  mov [hFile], eax
  mov  ebx, _st
  invoke GetLocalTime, ebx
  virtual at ebx
             systime  SYSTEMTIME
  end virtual
  xor eax, eax
  mov ax, [systime.wSecond]
  push eax   ; 1
  mov ax, [systime.wMinute]
  push eax   ; 2
  mov ax, [systime.wHour]
  push eax   ; 3
  mov ax, [systime.wYear]
  push eax   ; 4
  mov ax, [systime.wDay]
  push eax   ; 5
  mov ax, [systime.wMonth]
  lea eax, [month-4+eax*4]
  push eax   ; 6
  push szFormat   ; 7
  mov esi, buffer
  push esi   ; 8
  call [wsprintf]
  add esp, (8 * 4)
  invoke WriteFile, [hFile], esi, eax, NumberOfBytesWritten, 0
  invoke CloseHandle, [hFile]
@exit:
  invoke ExitProcess, 0


section '.data' data readable writeable

FileName    db  'CompileTime.inc',0
align 4
szFormat    db  'CompileTime  db  "%s %02u %04u at %02u:%02u:%02u",0',0
align 4
month       db  "Jan",0
            db  "Feb",0
            db  "Mar",0
            db  "Apr",0
            db  "May",0
            db  "Jun",0
            db  "Jul",0
            db  "Aug",0
            db  "Sep",0
            db  "Oct",0
            db  "Nov",0
            db  "Dec",0

section '.udata' readable writeable

hFile                 dd  ?
NumberOfBytesWritten  dd  ?
align 4
_st      SYSTEMTIME
align 4
buffer   rb   128


section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
          user32,'USER32.DLL'

include '%fasminc%\APIA\KERNEL32.INC'
include '%fasminc%\APIA\USER32.INC'


Дата: Авг 3, 2004 03:29:31

Приаттачишь EXE ???


Дата: Авг 3, 2004 03:40:35


Дата: Авг 3, 2004 03:49:53

Вот:
invoke WriteFile, [hFile], esi, eax, NumberOfBytesWritten, 0


Дата: Авг 3, 2004 03:55:41

Ошибку нашёл и исправил.


Дата: Авг 3, 2004 03:57:05

Угу, я тоже уже накопал, ее.
Забываю про скобочки.. Masm в голове сидит :-)


Дата: Авг 4, 2004 08:41:13

А почему вот такая штука не читает файлы с CD ?
(Должна ?)


invoke CreateFileA,addr FNameOp,ENERIC_WRITE\
GENERIC_READ,FILE_SHARE_WRITE+FILE_SHARE_READ,0,\
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0

mov hFileR,eax

invoke ReadFile,hFileR,addr lpBuffer,BufSiz,\
addr lpNumberOfBytesRead,0


Дата: Авг 4, 2004 12:43:48 · Поправил: Sk. Inc.

Sonic
1) У тебя ошибка:
invoke CreateFileA,addr FNameOp,ENERIC_WRITE\ 
GENERIC_READ,FILE_SHARE_WRITE+FILE_SHARE_READ,0,\ 
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
Должно быть:
invoke CreateFileA,addr FNameOp,GENERIC_WRITE\ 
GENERIC_READ,FILE_SHARE_WRITE+FILE_SHARE_READ,0,\ 
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
2) И как ты себе представляешь GENERIC_WRITE на компакт? Поэтому, функция и выпадает с ошибкой, данные-то на CD должны писАться сессиями :)


Дата: Авг 4, 2004 13:07:50

Sonic
Ты проверял успешность вызова CreateFileA и ReadFile, анализировал значение GetLastError.

Sk. Inc.
В твоем коде (который Должно быть) чего-то не хватает между GENERIC_WRITE и GENERIC_READ, ;-)


Дата: Авг 4, 2004 13:13:11 · Поправил: Sk. Inc.

q_q
Точно, должно быть так :)
invoke CreateFileA,addr FNameOp,GENERIC_WRITE\ 
or GENERIC_READ,FILE_SHARE_WRITE+FILE_SHARE_READ,0,\ 
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
Хотя в правильном варианте GENERIC_WRITE вообще не должно быть ;)


Дата: Авг 5, 2004 08:01:12

OK, всё работает, спасибо !


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068