Я работаю в проекте, в котором есть несколько компонентов C ++ и несколько компонентов C #. В настоящее время я работаю над новым компонентом C #, который должен обмениваться данными с компонентом C ++ (возможно, в будущем будет доступ к большему количеству компонентов). Все компоненты работают в одном процессе. Моя текущая идея — использовать базу данных в памяти, но я не уверен, возможно ли это.
SQLite популярен и доступен как для C ++, так и для C # проектов, а также имеет функцию в памяти. Вопрос в том, возможно ли получить доступ к одной и той же базе данных из обоих компонентов, могу ли я, например, использовать дескриптор базы данных (указатель), созданной в C ++ в моем проекте C #?
Да, это было бы возможно. Конечно, вам нужно поделиться некоторыми структурами данных и дескрипторами (как вы говорите). Таким образом, SQLite не может обнаружить разницу между управляемым кодом и собственным кодом. Поэтому не может быть никакой разницы в поведении.
Возможно, будет проще, если вы просто используете PInvoke или C ++ / CLI для обмена структурами данных. Раскрутка всей базы данных SQL только для передачи данных в процессе кажется расточительной.
Да, ты можешь. База данных sqlite находится в памяти, но находится в виде файла на диске. Когда вы закрываете соединение с базой данных, оно сбрасывается в файл на диске. Таким образом, вы можете открыть соединение БД в одном компоненте записи и закрыть соединение, чтобы другие компоненты могли читать / записывать в БД. Это похоже на то, как вы работаете с файлами, за исключением того, что оно управляется в памяти, а не на диске, поэтому работает немного быстрее, чем файлы. Но если ваше намерение заключается в IPC между c ++ и c #, есть и другие лучшие способы.