Image

Imageshanthi_om wrote in Imageru_cpp

Category:

кросспост, не думал, что буду тут глупые вопросы задавать...приходится:)
рисую читалку dbf файлов, созданных в вижуал фоксе(предположительно 5 или 7 версия). часть данных лежит в мемо полях. формат dbf известен, все ок, но

1. до конца не ясно что лежит в четырехбайтном поле в dbf-файле — смещение внутри файла fpt или номер блока мемо и какой тип данных у этих четырех байт

2. пытаюсь прочесть данные типа long след образом:


//** читаю запись
DWORD dwRead;
char* Buffer=new char[HeaderData->record_width];

HANDLE =CreateFile(path GENERIC_READ, // access mode
FILE_SHARE_DELETE|FILE_SHARE_WRITE|FILE_SHARE_READ, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);

SetFilePointer(hFile,
HeaderData->header_length + (CurrentRec->RecordNumber-1)*HeaderData->record_width, NULL,FILE_BEGIN);
ReadFile( hFile, Buffer, sizeof(*Buffer),&dwRead,NULL);

CurrentRec->CharData=strdup(Buffer);
delete[] Buffer;
CloseHandle(hFile);

//***читаю значение поля c типом long(4 байта)
char lngval[5];
long val=0;
strncpy(&lngval[0],(FieldData[num]).where,4);
lngval[4]='\0';
val = atol(lngval);




val равен нулю
если сделать ченить типа

typedef struct
{
long value;
} lv;


и читать/копировать данные из файла/массива в эту структуру то значение нормально.
почему не работает atol?

возвращаясь к первому вопросу: пытался привести четыре байта содержимого мемо к long способами указанными в п.2 — ни один не работает

ктонить может подсказать где грабли? может, там еще какихнить преобразований этим четырем байтам сделать нужно?