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

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

11.01.2020, 21:53. Показов 2383. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru