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

Тема в разделе "Другие", создана пользователем Firefox, 19 мар 2012.

Статус темы:
Закрыта.
  1. Firefox

    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++;
    }

    }
     
Загрузка...
Похожие Темы - Файлы Проецируемые На
  1. lmike
    Ответов:
    27
    Просмотров:
    245
  2. garrick
    Ответов:
    25
    Просмотров:
    657
  3. sgfsdg
    Ответов:
    1
    Просмотров:
    423
  4. vovanabali
    Ответов:
    0
    Просмотров:
    531
  5. anatoliygorbunov
    Ответов:
    1
    Просмотров:
    745
Статус темы:
Закрыта.

Поделиться этой страницей