Передачи данных от процесса к процессу на C++

Это мой первый раз, когда я размещаю вопрос здесь, я обычно нахожу ответы в архиве, но на этот раз я в тупике.

Я хватаю данные с джойстика, используя некоторый код от поставщика, который использует Windows Driver Kit. Данные представлены в виде массива с 6 элементами (это мышь с 6 степенями свободы).

Я уже написал код, который должен взять данные и в C++...он использует стандартную библиотеку с векторами, а что нет. Кажется что использование стандартной библиотеки с WDK-это большая головная боль, которую я потратил пару дней, пытаясь добраться до работы, но не смог. Моей следующей идеей было использовать boost:: interprocess, но это трудно использовать с WDK по тем же причинам.

Мне интересно, есть ли способ поделиться памятью между процессом C и процессом c++. Я хотел бы записать массив в память с помощью программы на C и прочитать его из программы на C++. Это должно произойти очень быстро, и должен быть способ убедиться, что я не читайте его в середине записи (мьютекс?).

идеи и предложения приветствуются.

редактировать Вместо этого я сделал DLL, теперь у меня просто есть DLL с функцией getValues (), которую я могу вызвать из своего проекта c++. Мне пришлось использовать идиому pimpl, чтобы скрыть материал C. Спасибо за помощь ребята!!

1 ответов


возможно, я что-то пропустил, но похоже, что вы создали процесс для извлечения данных джойстик. Чтобы избавить себя от некоторых проблем, замените этот процесс DLL C, предложенной в комментариях. Ваше основное приложение C++ может просто вызвать функцию в этой DLL, чтобы получить данные джойстика, даже не беспокоясь о блокировках или межпроцессной связи.

конечно, если вам нужны два процесса, вам нужно будет использовать общую память в DLL и на уровне процесса замки. Общая память необходима, потому что DLL загружаются отдельно в виртуальное пространство каждого процесса; ничего общего, следовательно, потребность в общей памяти.