Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 29.09.2019
Сообщений: 17

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

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

Студворк — интернет-сервис помощи студентам
Я пытаюсь сделать так,что бы в одном процессе создавался файл, в него загружались полученные вычисления и после этого файл отображался в память. После этого другой процесс должен получить этот файл и вывести его содержимое в консоль. Я пытаюсь сделать это так,но получаю ошибку(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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2020, 21:53
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru