Андрей |
Отправлено: 04.04.2005, 09:21 |
|
Не зарегистрирован
|
При вызове функции ReadFile или WriteFile появляется ошибка "Access violation at addres in kernel32.dll". Подскажите куда копать, примеры брал из msdn.
CODE |
HANDLE hMapFile;
LPVOID lpMapAddress;
hMapFile = CreateFileMapping((HANDLE) 0xFFFFFFFF, // Current file handle.(swap)
NULL, // Default security.
PAGE_READWRITE, // Read/write permission.
0, // Max. object size.
1024, // Size of hFile.
"ASDZXC"); // Name of mapping object.
if (hMapFile == NULL)
{
Application->MessageBoxA("","Could not create file mapping object.",0);
}
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.
if (lpMapAddress == NULL)
{
Application->MessageBoxA("","Could not map view of file.",0);
}
char *test="111222333<!--POST BOX-->";
LPVOID lpBuffer;
LPDWORD lpNumberOfBytesRead;
lpBuffer=test;
ReadFile(
hMapFile,
lpBuffer,
4,
lpNumberOfBytesRead,
NULL
);
|
|
|
klen |
Отправлено: 04.04.2005, 09:35 |
|
Машинист паровоза
Группа: Участник
Сообщений: 239
|
Однако... У меня код это работает. С правами на свап косяков нет? Мож форточка не хочет чтоб ты ее любимый свап трогал, а билли забыл про это написать н коробке с ОС.
Одна тонкость обнаружилась — код работает без ошибок но свап не читает всегда пишет нуль байтов!! Прикол однако, сидим курим. Интересно стало.
У меня часто бывают глюки — то API функция зависнит и ничего не вернет (кстати обычно с фукциями ввода вывода и бывают касяки), то как у тебя — "не лезь куда не нада", ну и тд, обсолютно недокументированое поведение. Все решаестя в каждом случае методом затрахывания под конкретный случай. Потом косяк пропадает и ты уже не знаешь в чем причина — весь код перелопачен шиворот навыворот.
Отредактировано klen — 04/04/2005, 09:36 |
|
Андрей |
Отправлено: 04.04.2005, 10:37 |
|
Не зарегистрирован
|
С правами все номально. Пока сделал так, может оставлю:
CODE |
// write to shared mem
char *test="qweasdzxc<!--POST BOX-->";
LPTSTR lpszBuf=test;
DWORD cchSize=5;
LPTSTR lpszTmp;
lpszTmp = (LPTSTR)lpMapAddress;
while(cchSize--)
*lpszTmp++ = *lpszBuf++;
Edit1->Text=(LPTSTR)lpMapAddress;
// read from shared mem
Edit2->Text=(LPTSTR) lpMapAddress;
| |
|
|