|
马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 bestkakkoii 于 2021-2-19 03:24 编辑
需要读取二进制.dat地图档只知WINAPI CreateFileA,ReadFile可以读但不知道在TC中指出参数怎么填才正确
用TC自带的文件读取只能读到标头的前几个字
原码如下:
- function WH()
- var path = "D:/BlueCrossgate/map/1/3/2160.dat"
- var hFile = fileopen(path)
- traceprint(hFile)
- var content = ReadFile(hFile)
- traceprint(content)
- var FF = fileclose(hFile)
- traceprint(FF)
- end
- function CreateFileA(lpFileName, dwDesiredAccess = #80000000, dwShareMode = #1, lpSecurityAttributes = null, dwCreationDisposition = 0, dwFlagsAndAttributes = #80, hTemplateFile = null)
- //dwDesiredAccess
- var GENERIC_READ = #80000000
- //dwShareMode
- var off = #0
- var FILE_SHARE_DELETE = #00000004
- var FILE_SHARE_READ = #00000001
- var FILE_SHARE_WRITE = #00000002
- //dwCreationDisposition
- var OPEN_EXISTING = 3
- return dllcall("kernel32.dll", "int", "CreateFileA", "char *", lpFileName, "int", dwDesiredAccess, "int", dwShareMode, "int", lpSecurityAttributes, "int", dwCreationDisposition, "int", dwFlagsAndAttributes, "int", hTemplateFile)
- end
- var tempcontent = 0
- function ReadFile(hFile, lpOverlapped = null)
- var nNumberOfBytesToRead = dllcall("kernel32.dll", "long", "GetFileSize", "long", hFile, "long", null)
- tempcontent = 0
- var lpBufferPointer = getvarpointer(tempcontent)
- traceprint(lpBufferPointer)
- var lpNumberOfBytesRead = 0
- var lpNumberOfBytesReadaddr = getvarpointer(lpNumberOfBytesRead)
- traceprint(lpNumberOfBytesReadaddr)
- var CC = dllcall("kernel32.dll", "int", "ReadFile", "int", hFile, "int", lpBufferPointer, "int", nNumberOfBytesToRead, "int", lpNumberOfBytesReadaddr, "int", lpOverlapped)
- traceprint(CC)
- return tempcontent
- end
- function Closehandle(hObject)
- return dllcall("kernel32.dll", "long", "CloseHandle", "long", hObject)
- end
复制代码
|
|