在运行时保持C#和C++类的同步?

4
我的应用程序分为两部分。一个是C#可执行文件,是前端UI;另一个是C++动态链接库,主要是底层操作。我的应用程序创建和管理许多对象实例,其中每个C++对象实例都有一个相应的C#对象实例。我可以使用哪些技术或库来确保C#和C++部分的对象以及这些对象中的数据在运行时始终保持同步?修改一个对象实例中的一个成员应该更新相应的对象实例。
谢谢!
编辑:澄清一下我所说的“保持对象同步”的含义。

C#对象实例是否封装了C++对象实例?例如,您的C#对象是否包含指向C++对象的指针? - Soo Wei Tan
它们是独立的。它们会通过一个中间对象进行通信,比如通过网络。 - djcouchycouch
2个回答

2
也许代码生成会很有效。例如,在一个地方定义这些类的属性/方法(可能是XML或其他格式),然后从中生成C#和C ++类。也许可以使用像CodeSmith(http://www.codesmithtools.com/)这样的工具来生成代码。

当你这样做时,请确保你生成的C#类是“partial”的。这样,如果你需要在C#类中添加任何与UI相关的代码,你就不需要重新生成对象,而且重新生成对象也不会阻止对象的再生成。 - GWLlosa
嗨,亚历克斯!我意识到我没有明确指定那些对象应该以何种方式保持同步,因此我更新了我的问题。我想说的是在运行时保持实例同步。谢谢! - djcouchycouch

1

不太清楚它是否能解决问题,但您考虑过使用Managed C++吗?我曾经非常成功地将我的C++代码编译为Managed C++,然后使用托管扩展创建直接使用底层C++数据的.NET类。这样,只有一个数据副本。

可能并不适用于所有情况(我并没有通过任何方式测试其极限),但我发现它可以节省很多时间。由于Managed C++是一个合适的.NET语言,因此从C#方面使用的结果很干净,没有通常需要解决的奇怪或特殊情况。

(另一种类似的方法是使用SWIG (http://www.swig.org/) 为您生成包装器。我听说它易于使用且有效,但我自己没有使用过。)


嗨,brone!感谢您的回答。不幸的是,设计不在我的掌控之中。我只是在寻找最佳解决方案,考虑到当前的设计。 - djcouchycouch
然而,如果我有选择的话,我可能会选择完全像这样的解决方案。 - djcouchycouch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接