https://studentbar.ru/
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
вызов ReadFile
Андрей
Отправлено: 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



Однако... У меня код это работает. С правами на свап косяков нет? Мож форточка не хочет чтоб ты ее любимый свап трогал, а билли забыл про это написать н коробке с ОС.

Одна тонкость обнаружилась — код работает без ошибок но свап не читает smile.gif всегда пишет нуль байтов!! Прикол однако, сидим курим. Интересно стало.

У меня часто бывают глюки — то 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;

Вернуться в Вопросы программирования в C++Builder