| Цитата(tilser @ 21.4.2008, 21:13) | [code=cpp] struct header { int m_size; int m_address; };
void WriteToMapFile(CString text, int numb, HANDLE &hFileMap) { header h; h.m_size = text.GetLength() + 1; h.m_address = numb; hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(header) + h.m_size, "Global\\Data");
|
Запрошен мэпинг на размер заголовка + данные (sizeof(header) + h.m_size)
| Цитата |
| Код | BYTE *pBuff = (BYTE*)MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(header)); memcpy(pBuff, &h, sizeof(header)); UnmapViewOfFile(pBuff);
|
|
Замэплен заголовок с начала файла, заполнен
| Цитата |
| Код | pBuff = (BYTE*)MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, sizeof(header), 0); memcpy(pBuff, text.GetString(), h.m_size); UnmapViewOfFile(pBuff); CloseHandle(hFileMap); }
|
|
Снова замэплен заголовок с начала файла, и перезаписан данными (явно большей длинны, чем заголовок)
| Цитата | На строчке memcpy(pBuff, text.GetString(), h.m_size) выдает Access violation.
|
Неудивительно
| Цитата | Ошибка наверное в параметрах. которые передаю в MapViewOfFile. но не могу понять какая.
|
Угу, надо мэпить сразу все и записывать в один прием. Замэпить только данные не получится - файловой смещение должно быть кратно размеру страницы (4К)
|