我正在一个包含多个C ++和一些C#组件的项目中工作。我目前正在开发一个新的C#组件,需要与C ++组件共享数据(将来可能会有更多的组件访问它)。所有组件都在同一进程中运行。我目前的想法是使用内存数据库,但我不确定它是否可行。
SQLite很受欢迎,可用于C ++和C#项目,并且具有内存中的功能。问题是,是否可以从两个组件访问同一个数据库,我是否可以使用C#项目中用C ++创建的db(指针)句柄?
答案 0 :(得分:3)
是的,那是可能的。当然,您需要共享一些数据结构和句柄(如您所说)。这样,SQLite无法检测托管代码和本机代码之间的任何差异。因此,行为没有区别。
如果您只是使用PInvoke或C ++ / CLI来交换数据结构,可能会更容易。为了在进程中传递数据而启动整个SQL数据库似乎很浪费。
答案 1 :(得分:0)
是的,你可以。 sqlite数据库位于内存中,但它作为磁盘上的文件驻留。关闭数据库连接时,它会刷新到磁盘上的文件。因此,您基本上可以在一个组件中打开db连接,并关闭连接,以便其他组件可以读/写到db。它与你操作文件的方式类似,只是它在内存中管理而不是在磁盘上管理比文件快一点。但如果你的意图是c ++和c#之间的IPC,还有其他更好的方法。