我在ReadFile()中遇到了一个奇怪的问题。文本文件正确打开但它只读取4个字节而不是MemorySize中声明的字节数。 C中的相同代码正确执行。有人知道什么是错的吗?
此致
.DATA
FileName DB "test.txt",0
MemorySize DWORD 10
.DATA?
hFile HANDLE ?
pMemory DWORD ?
SizeR DWORD ?
.CODE
start:
INVOKE CreateFile, ADDR FileName,\
GENERIC_READ, 0, NULL,\
OPEN_EXISTING, 0, NULL
mov hFile, eax
INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1
mov pMemory, eax
INVOKE ReadFile, hFile, ADDR pMemory, MemorySize, ADDR SizeR, NULL
INVOKE MessageBox, 0, ADDR pMemory, 0, 0
INVOKE LocalFree, pMemory
INVOKE CloseHandle, hFile
ret
end start
答案 0 :(得分:0)
INVOKE ReadFile, hFile, ADDR pMemory, MemorySize, ADDR SizeR, NULL
INVOKE MessageBox, 0, ADDR pMemory, 0, 0
在这两行中,您传递的指针指向pMemory的指针。 GlobalAlloc返回一个指向内存的指针,而ReadFile需要一个指针not指向指针的指针。删除ADDR,它应该可以工作。
INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1
这也是错误的。您不能像在高级语言中那样执行MemorySize + 1。在这种情况下,您需要这样做:
inc MemorySize
在致电GlobalAlloc之前