Я впервые пишу здесь вопрос, обычно я нахожу ответы в архиве, но на этот раз я в тупике.
Я собираю данные с джойстика, используя некоторый код от поставщика, который использует Windows Driver Kit. Данные представлены в виде массива из 6 элементов (это мышь с 6 степенями свободы).
Я уже написал код, который должен захватывать данные, и он находится на C ++ … он часто использует стандартную библиотеку с векторами, а что нет. Кажется, что использование стандартной библиотеки с WDK — большая головная боль, которую я потратил пару дней, пытаясь приступить к работе, но потерпел неудачу. Моей следующей идеей было использовать boost :: interprocess, но это трудно использовать с WDK по тем же причинам.
Мне интересно, есть ли способ разделить память между процессом C и процессом C ++. Я хотел бы записать массив в память с помощью программы на C и прочитать его из программы на C ++. Это должно произойти очень быстро, и должен быть способ убедиться, что я не читаю это в середине записи (мьютекс?).
Любые идеи или предложения приветствуются.
РЕДАКТИРОВАТЬ
Вместо этого я сделал DLL, теперь у меня просто есть DLL с функцией getValues (), которую я могу вызывать из своего проекта C ++. Я должен был использовать идиому pimpl, чтобы скрыть вещи c, хотя. Спасибо за помощь, ребята!!
Возможно, я что-то пропустил, но похоже, что вы создали процесс для получения данных джойстика. Чтобы избежать неприятностей, замените этот процесс на C DLL, предложенную в комментариях. Ваше основное приложение на C ++ может затем просто вызвать функцию внутри этой DLL, чтобы получить данные джойстика, даже не беспокоясь о блокировках или межпроцессном взаимодействии.
Конечно, если вам нужны два процесса, вам нужно использовать разделяемую память в DLL и блокировки на уровне процессов. Общая память необходима, потому что библиотеки DLL загружаются отдельно в виртуальное пространство каждого процесса; ничего не передается, отсюда и потребность в разделяемой памяти.
Других решений пока нет …