Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2020, 23:25   #1
Talion
 
Регистрация: 04.07.2019
Сообщений: 4
По умолчанию Отображение файла в память используя WinApi

Я пытаюсь сделать так,что бы в одном процессе создавался файл, в него загружались полученные вычисления и после этого файл отображался в память. После этого другой процесс должен получить этот файл и вывести его содержимое в консоль. Я пытаюсь сделать это так,но получаю ошибку(2) при попытке открыть файл во втором процессе. Подскажите, как это можно исправить?

1 процесс

Код:
CHAR stdPath[30] = TEXT("Res.txt");
    HANDLE hFile = CreateFile(stdPath, FILE_SHARE_WRITE | FILE_SHARE_READ, 0, nullptr, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, nullptr);
    std::string buf = "";
    int i = 0;
    std::ostringstream s;
    while (i < currentIndex) {
        s << "X = " << pointsX[i] << "          Y = " << pointsY[i] << "\n";
        i++;
    }
    buf.append(s.str());;
    DWORD length = buf.size();
    WriteFile(hFile, buf.c_str(), length , 0, 0);
    DWORD FileSize = GetFileSize(hFile, nullptr);
 
    HANDLE hMapping = CreateFileMapping(hFile, nullptr, PAGE_READONLY,0, 0, nullptr);
    if (hMapping == nullptr) {
        printf("\n--------------------------------------------------------\n");
        printf("%d",GetLastError());
        printf("\n--------------------------------------------------------\n");
        return 0;
    }
    const char* dataPtr = (const char*)MapViewOfFile(hMapping,FILE_MAP_READ,0,0,length);
    return 0;
2 процесс

Код:
HANDLE hMapFile;
    LPCTSTR pBuf;
    TCHAR szName[] = TEXT("Res.txt");
    hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,szName);
    pBuf = (LPTSTR)MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,BUF_SIZE);
    MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
    UnmapViewOfFile(pBuf);
    CloseHandle(hMapFile);
    return 0;
Talion вне форума Ответить с цитированием
Старый 12.01.2020, 02:18   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Код:
HANDLE CreateFileMappingA(
  HANDLE                hFile,
  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  DWORD                 flProtect,
  DWORD                 dwMaximumSizeHigh,
  DWORD                 dwMaximumSizeLow,
  LPCSTR                lpName  // <-- Вот этот параметр задаёт имя маппинга. 
);
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отображение файла в память fog_ Общие вопросы Delphi 5 09.09.2016 14:37
Отображение файла в оперативную память rostik123 Win Api 1 06.11.2012 04:59
Отображение файла в оперативную память rostik123 Общие вопросы C/C++ 3 29.10.2012 20:02
Как рисовать текст в си используя WinAPI? positiveman Win Api 1 22.05.2010 01:48