标题:求教:使用ReadFile无法读出数据,请看下有什么问题?
只看楼主
hwbnet
Rank: 1
等 级:新手上路
威 望:2
帖 子:355
专家分:0
注 册:2004-12-9
 问题点数:0 回复次数:5 
求教:使用ReadFile无法读出数据,请看下有什么问题?
buffer db "F:\\3d\\6\\存档\\ren.hwb",0
wenjian HANDLE ?
ff dd 41088d dup (?)


hwb proc
invoke CreateFile,ADDR buffer,\
GENERIC_READ,\
FILE_SHARE_READ,\
0,\
OPEN_EXISTING,\
FILE_ATTRIBUTE_ARCHIVE,\
0
mov wenjian,eax
cmp eax,INVALID_HANDLE_VALUE
jz @F
lea eax,ff
invoke SetFilePointer,wenjian,0,0,FILE_BEGIN
invoke ReadFile,wenjian,ff,164352d,0,0
invoke CloseHandle,wenjian
@@:
ret
hwb endp
搜索更多相关主题的帖子: ReadFile 数据 
2007-10-01 20:15
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 

;#Mode=CON

.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include libc.inc

includelib msvcrt.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

.data

buffer db "F:\\3d\\6\\存档\\ren.hwb",0
wenjian HANDLE ?
ff dd 41088d dup (0)

.CODE

hwb proc
local read:dword
invoke CreateFile,ADDR buffer,\
GENERIC_READ,\
FILE_SHARE_READ,\
0,\
OPEN_EXISTING,\
FILE_ATTRIBUTE_ARCHIVE,\
0
mov wenjian,eax
cmp eax,INVALID_HANDLE_VALUE
jz @F
lea eax,ff
invoke SetFilePointer,wenjian,0,0,FILE_BEGIN
invoke ReadFile,wenjian,offset ff,10000,read,0
invoke CloseHandle,wenjian
@@:
ret
hwb endp
START:
invoke hwb
invoke printf,CTXT("%s"),offset ff
;int 3h
invoke ExitProcess,0


end START

[此贴子已经被作者于2007-10-2 16:18:51编辑过]

2007-10-02 11:03
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
是这样吗?
2007-10-02 11:03
hwbnet
Rank: 1
等 级:新手上路
威 望:2
帖 子:355
专家分:0
注 册:2004-12-9
得分:0 
push eax
invoke ReadFile,wenjian,offset ff,10000,esp,0
pop eax
改成这样就对了,请问这样改是什么意思?

胡文斌 本人论坛:http://hwbnet.bbs./
2007-10-02 11:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用hwbnet在2007-10-2 11:43:34的发言:
push eax
invoke ReadFile,wenjian,offset ff,10000,esp,0
pop eax
改成这样就对了,请问这样改是什么意思?

不好理解就想想c里的指针

用调试器跟踪一下就明白了



buffer db 'aaaaaaa',0

那 buffer 就指的是‘a’ offset buffer 指的是buffer的地址

2007-10-02 15:24
hwbnet
Rank: 1
等 级:新手上路
威 望:2
帖 子:355
专家分:0
注 册:2004-12-9
得分:0 

发现原因了,错在第四个参数,改为变量地址就行了。书上是这么说的:“返回本次读入操作实际读入的字节数,在进行任何I/O或错误检查之前该参数都应先设置为0。”真是诱导人误解为参数设为0。


胡文斌 本人论坛:http://hwbnet.bbs./
2007-10-02 16:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-174544-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.116302 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved