Тема такая: есть файл, в который записана структура данных. Формат структуры есть. Задача - правильно прочитать данные.
Я делаю
- Код: Выделить всё
hFile = FreeFile
Open cFileName For Binary As hFile
cBody = Space(LOF(hFile))
Get hFile, 1, cBody
Close hFile
' для строк
cRes = Mid(cBody, 1, 4)
' для 4-байтовой целой
cTmp = Mid(cBody, 5, 4)
For i = 4 To 1 Step -1
nRes = 256 * nRes + Asc(Mid(cTmp, i, 1))
Next i
' для 8-байтовой с плавайщей точкой
Dim dRes As Double
cTmp = Mid(cBody, 9,
CopyMemory ByVal VarPtr(dRes), StrPtr(cTmp), 8
Все классно, кроме dRes. В ней появляется все, кроме того, что я ожидал увидеть.
Может, я неправильно применяю CopyMemory?
Вопрос второй. Пробую через ReadFile.
- Код: Выделить всё
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const GENERIC_READ = &H80000000
Private Const FILE_SHARE_READ = &H1
Private Const OPEN_EXISTING = 3
...
nR = CreateFile("c:\1.dat", GENERIC_READ, FILE_SHARE_READ, 0, 0, 0, 0)
...
FormatMessage FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, er, 256, 0
...
CreateFile возвращает -1 (который Invalid Handle), GetLastError() = 0 и FormatMessage, соответственно, "Операция завершена успешно".
После того, как мой обработчик ошибок написал "Не удалось открыть файл. Описание ошибки: Операция завершена успешно.", я выпал в осадок.
Вот так, сплошные глюки Короче, помощь нужна...