Russian Qt Forum
Ноябрь 26, 2024, 13:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ дочернего процесса к file mapping родительского процесса.  (Прочитано 3111 раз)
libertas
Гость
« : Март 16, 2014, 19:59 »

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

Мой код в родительском процессе:

Код:
HANDLE hfilemap;
HANDLE hfile;
char* pMap;
hfile = CreateFile(L"My.txt",
                              GENERIC_READ | GENERIC_WRITE,
                              FILE_SHARE_READ | FILE_SHARE_WRITE,
                              0,
                              OPEN_ALWAYS,
                              FILE_ATTRIBUTE_NORMAL,
                              0);
hfilemap = CreateFileMapping(hfile,
                                            0,
                                            PAGE_READWRITE,
                                            0,
                                            256,
                                            L"MyFileMapping");
pMap = static_cast<char*>(MapViewOfFile(hfilemap,
                                       FILE_MAP_ALL_ACCESS,
                                       0,
                                       0,
                                       0));

Затем я запускаю дочерний процесс как
Код:
 STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    wchar_t name[] = L"..\\HelloWorld\\debug\\HelloWorld.exe";
    WINBOOL wChild = CreateProcess(0,
                                  name,
                                  0,
                                  0,
                                  FALSE,
                                  0,
                                  0,
                                  0,
                                  &si,
                                  &pi);

В дочернем процессе нужно использовать функцию OpenFileMapping или нужно делать по-другому?

Спасибо.
Записан
Hrundel
Гость
« Ответ #1 : Март 17, 2014, 03:15 »

Во первых, тема далеко не для новичков. Во вторых, не имеет ни какого отношения к Qt форуму. WinAPI здесь в прямую не обсуждается. *(Qt для того и создан, чтобы WinAPI с MFC мочкануть Показает язык  Смеющийся  Смеющийся  Смеющийся)
Найдутся, конечно, хорошие люди и ответят - но как-то не совсем в тему это.
« Последнее редактирование: Март 17, 2014, 03:20 от Hrundel » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Март 17, 2014, 08:58 »

Информации же бездна на эту тему.
У меня вот так работает в "дочернем" процессе:

Код
C++ (Qt)
bool SharedIndexReader::open(const char *name)
{
   mapFile = OpenFileMapping(
       FILE_MAP_READ,          // Read access
       FALSE,                  // Do not inherit the name
       name                    // File mapping name
   );
   if (!mapFile) return false;
 
   size = (index *)MapViewOfFile(
       mapFile,                // Handle of the map object
       FILE_MAP_READ,          // Read access
       0,                      // High-order DWORD of the file offset
       0,                      // Low-order DWORD of the file offset
       sizeof(*size)           // The number of bytes to map to view
   );
 
   return (size != nullptr);
}
А вообще, если нужен всё же Qt, то там есть QSharedMemory для всего этого - отлично работает.
« Последнее редактирование: Март 17, 2014, 09:00 от xokc » Записан
libertas
Гость
« Ответ #3 : Март 17, 2014, 13:35 »

Спасибо, я так и думал делать через именованый объект. Только я возврашаю char*. А в примере index*. Я так понимаю, это зависит от того с чем удобней потом работать?
Записан
libertas
Гость
« Ответ #4 : Март 17, 2014, 13:36 »

Во первых, тема далеко не для новичков. Во вторых, не имеет ни какого отношения к Qt форуму. WinAPI здесь в прямую не обсуждается. *(Qt для того и создан, чтобы WinAPI с MFC мочкануть Показает язык  Смеющийся  Смеющийся  Смеющийся)
Найдутся, конечно, хорошие люди и ответят - но как-то не совсем в тему это.

Согласен, промахнулся я с темой=) Извиняюсь=)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 5.1 секунд. Запросов: 23.