Файлы Проецируемые На Память

  • Автор темы Firefox
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Firefox

Здравствуйте. помогите пожалуйста решить такую проблему. делаю обмен между программа через файлы проецируемые на память. В программе где файл создается чтение и запись делается. а вот во второй программе, где файл открывается при попытке чтения программа сразу вылетает в break из-за ошибки по памяти. но файл находит и дисриптор возвращает не нулевой.
C++:
// программа где файл создается
#include "Mapping_File.h"
#include "stdio.h"
LPCWSTR lpFileName_in;
LPCWSTR lpFileName_out;
// Идентификатор отображения файла на память
HANDLE hFileMapping_in;
HANDLE	hFileMapping_out;
// Указатель на отображенную область памяти
LPVOID lpFileMap_in,lpFileMap_out;
Mapping_File::Mapping_File()
{
// Имя отображния файла на память
lpFileName_in = L"InFileName";
lpFileName_out = L"OutFileName";



}
Mapping_File::~Mapping_File()
{
;
}
int Mapping_File::CreateMappingFiles()
{
// Создаем объект-отображение
hFileMapping_in = CreateFileMapping(INVALID_HANDLE_VALUE ,
NULL, PAGE_READWRITE, 0, 100, (LPCWSTR)lpFileName_in);

// Если создать не удалось, выводим код ошибки
if(hFileMapping_in == NULL)
{
QMessageBox::warning(0,"Error", "Can't create in mapping file");
return 1;
}
// Создаем объект-отображение
hFileMapping_in = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL, PAGE_READWRITE, 0, 100, (LPCWSTR)lpFileName_out);

// Если создать не удалось, выводим код ошибки
if(hFileMapping_out == NULL)
{
QMessageBox::warning(0,"Error", "Can't create out mapping file");

return 2;
}
// Выполняем отображение файла на память.
// В переменную lpFileMap будет записан указатель на
// отображаемую область памяти
lpFileMap_in = MapViewOfFile(hFileMapping_in, 
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

// Если выполнить отображение не удалось,
// выводим код ошибки
if(lpFileMap_in == 0)
{
QMessageBox::warning(0,"Error", "Can't display on memory in mapping file");

return 3;
}
// Выполняем отображение файла на память.
// В переменную lpFileMap будет записан указатель на
// отображаемую область памяти
lpFileMap_out = MapViewOfFile(hFileMapping_out, 
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 2);

// Если выполнить отображение не удалось,
// выводим код ошибки

if(lpFileMap_in == 0)
{
QMessageBox::warning(0,"Error", "Can't display on memory out mapping file");
//return 4;
}
QString str="hello";
wchar_t str_end[20];
wchar_t *par;
int count=0;
DWORD dwLenght;
while(count<str.size())
{
dwLenght=str.at(count).toAscii();
*((LPDWORD)lpFileMap_in)=dwLenght;
str_end[count]=(*((LPSTR)lpFileMap_in));
putch(str_end[count]);
count++;
}
if(count==str.size())
{
count=0;
}
}

C++:
/// программа где надо получить доступ к файлу
#include "Mapping_file.h"
// Идентификатор отображения файла на память
HANDLE hFileMapping;
// Указатель на отображенную область памяти
LPVOID lpFileMap;

LPCWSTR lpFileName_in;
LPCWSTR lpFileName_out;
// Идентификатор отображения файла на память
HANDLE hFileMapping_in;
HANDLE	hFileMapping_out;
// Указатель на отображенную область памяти
LPVOID lpFileMap_in,lpFileMap_out;
Mapping_file::Mapping_file()
{
// Имя отображния файла на память
lpFileName_in = L"InFileName";
lpFileName_out = L"OutFileName";
// Открываем объект-отображение
hFileMapping = OpenFileMapping(
FILE_MAP_READ | FILE_MAP_WRITE, FALSE, lpFileName_in);

// Если открыть не удалось, выводим код ошибки
if(hFileMapping == NULL)
{
fprintf(stdout,"OpenFileMapping: Error %ld\n", 
GetLastError());
getch();
return;
}

// Выполняем отображение файла на память.
// В переменную lpFileMap будет записан указатель на
// отображаемую область памяти
lpFileMap = MapViewOfFile(hFileMapping, 
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);

// Если выполнить отображение не удалось,
// выводим код ошибки
if(lpFileMap == 0)
{
fprintf(stdout,"MapViewOfFile: Error %ld\n", 
GetLastError());
getch();
return;
}
}
Mapping_file::~Mapping_file()
{
// Отменяем отображение файла
UnmapViewOfFile(lpFileMap);

// Освобождаем идентификатор созданного
// объекта-отображения
CloseHandle(hFileMapping);



}
void Mapping_file::Open_mop_file()
{



wchar_t str_end[20];
int count=0;
DWORD dwLenght;
while(count<20)
{
str_end[count]=(*((LPSTR)lpFileMap_in));
putch(str_end[count]);
count++;
}

}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!