0 / 0 / 0
Регистрация: 29.09.2019
Сообщений: 17
1

Отображение файла в памяти, используя WinApi

11.01.2020, 21:53. Показов 2134. Ответов 4
Метки нет (Все метки)

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

1 процесс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 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 процесс

C++
1
2
3
4
5
6
7
8
9
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;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2020, 21:53
Ответы с готовыми решениями:

WinApi отображение файла на память, virtualalloc, createfilemapping, MapViewOfFile
Добрый вечер, прошу прощение если ошибся разделом. стоит задача: Организовать текстовый буфер...

Отображение файла в памяти
Разбирал пример из книги Побегайло про проецирование объекта в памяти. Код: #include &quot;StdAfx.h&quot;...

Как изменить размер файла так,чтоб удалились последние байты данных в файле используя WinAPI
Есть тот же текстовый файл с текстом размером 75 байт.После вызова какой-то функции для работы с...

Запуск файла из оперативной памяти не используя жесткий диск
Добрый день! Давайте представим, что нам нельзя ничего хранить на ЖД, но у нас есть в какой-нибудь...

4
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
11.01.2020, 23:21 2
Ты бы подробней описывал ошибки...
А так... может быть второй процесс не находит в своем АП этой мапки? Например потому что ее там не-ту?
0
0 / 0 / 0
Регистрация: 29.09.2019
Сообщений: 17
11.01.2020, 23:57  [ТС] 3
Цитата Сообщение от БедолагаЖека Посмотреть сообщение
Ты бы подробней описывал ошибки...
А так... может быть второй процесс не находит в своем АП этой мапки? Например потому что ее там не-ту?
Можете подсказать как можно это исправить? Я пока пытался разобраться окончательно запутался.
0
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
12.01.2020, 11:18 4
Как вариант, во втором процессе читать память первого - самое простое, наверное.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2020, 11:53 5
Цитата Сообщение от LightHuter Посмотреть сообщение
После этого другой процесс должен получить этот файл и вывести его содержимое в консоль. Я пытаюсь сделать это так,но получаю ошибку(2) при попытке открыть файл во втором процессе. Подскажите, как это можно исправить?
В CreateFileMapping последним параметром нужно передавать имя, которое потом будет использовать OpenFileMapping
C++
1
2
3
4
5
CreateFileMapping(................, "Global\\MyFileMappingObject");
 
----------------------------------
 
OpenFileMapping(................, "Global\\MyFileMappingObject");
Creating Named Shared Memory
0
12.01.2020, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2020, 11:53
Помогаю со студенческими работами здесь

Отображение Jpeg на WinAPI
Доброго времени суток! Программирую на CodeBlocks На чистом WinAPI. Мне необходимо просто...

Отображение графиков функций на C++ (WinApi)
Доброго времени суток. хочу сделать программу под visual studio 2013 C++, позволяющую отображать...

Отображение элементов WinAPI поверх Directx
Всем привет! Пишу свой движок. мне нужно рисовать кнопки и прочие элементы поверх DirectX 11....

WinApi - Утечка памяти
Никак не пойму, откуда в этом коде утечка памяти? HWND window = GetDesktopWindow(); RECT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru