[Win32] Как сделать динамическую структуру данных, доступную из двух и более процессов?21.09.09 11:07 Автор: Vedrus <Serokhvostov Anton> Статус: Member
Возникла такая необходимость. Суть: есть программа-сервер, которая формирует задания и отдаёт их на выполнение программам-клиентам.
Сервер выделяет память под структуру данных, заполняет её, и запускает клиента, передавая ему в командной строке адрес этой структуры. Клиент получает эту структуру и работает с ней.
Так должно быть в теории, на практике получается вот что. Я пробовал выделять память двумя способами:
lpSv->lpContext[i] = new LPCLIENT_CONTEXT; и
lpSv->lpContext[i] = (LPCLIENT_CONTEXT) GlobalAlloc(GMEM_FIXED, sizeof(CLIENT_CONTEXT)); И тот и другой способ, как я понял, выделяют память в текущем процессе (т.е. в памяти сервера). Когда клиент пытается обратиться по адресу, переданному ему в командной строке, то вылитает эксепшен.
Есть ли какой-нибудь способ создать разделяемую динамическую структуру данных?
PS. Я знаю, что эту проблему можно решить с помощью именованных каналов и сокетов, но меня интересует именно такой вариант.
memory mapped файлы в том числе для того и придуманы21.09.09 14:00 Автор: dl <Dmitry Leonov> Отредактировано 21.09.09 14:01 Количество правок: 1
Только выделять память уже не через new, а заданием размера файла, и отображать не реальный файл, а INVALID_HANDLE_VALUE. Ну и передавать не адрес, а имя объекта.