0

ReadFile() で奇妙な問題に遭遇しました。テキストファイルは正しく開かれますが、MemorySize で宣言されたバイト数ではなく、4 バイトしか読み取れません。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
4

1 に答える 1

0
INVOKE ReadFile, hFile, ADDR pMemory, MemorySize, ADDR SizeR, NULL
INVOKE MessageBox, 0, ADDR pMemory, 0, 0

これらの 2 行では、pMemory のポインターへのポインターを渡しています。GlobalAlloc はメモリへのポインタを返し、ReadFile はポインタへのポインタではないことを期待します。ADDR を削除すると、動作するはずです。

INVOKE GlobalAlloc, GMEM_FIXED or GMEM_ZEROINIT, MemorySize+1

これも間違っています。高水準言語のように MemorySize + 1 を実行することはできません。この場合、次のことを行う必要があります。

inc     MemorySize

GlobalAlloc を呼び出す前に

于 2012-08-18T03:08:11.363 に答える