是否可以在C#和C ++代码之间共享对C#对象的引用而没有大的复杂性?或者这通常被认为是一个坏主意?
答案 0 :(得分:3)
在本机代码和托管代码之间共享C#对象的最佳解决方案是使用COM互操作。这允许您基本上在托管代码和C ++中的等效签名之间共享对象的接口。
至于事物的复杂性。大多数COM互操作方案都是直接的,并且实际上并不比旧的COM编程复杂。在管理方面,它看起来与普通接口没什么不同。
一旦你引入多个线程或开始在COM公寓之间玩游戏,事情就会变得有点棘手。
根据我的经验,最简单的方法是:
这将获得两个项目的接口定义。如何在项目之间传递它需要更多细节到您的架构。
答案 1 :(得分:0)
根据个人经验,我建议的另一个解决方案是,如果要访问的C ++代码太大或太复杂,请在两者之间使用托管C ++接口。
例如,我在C#项目中使用RakNet C ++网络库。解决方案是在C#中创建一个大型包装类来访问所需的C ++函数,围绕那些可以用作COM互操作的函数创建一个C ++包装器,或者使用托管C ++(Visual C ++ / CLI)。
我选择后者允许我使用C ++访问RakNet库,但创建的类可以直接在另一个.NET项目中使用,就好像。因此,主要逻辑已经在那些托管C ++类中创建,这也允许我使用.NET框架及其一些很棒的功能。在我的C#项目中,我只需要调用Managed C ++库,它为我提供了执行所有操作所需的所有20个函数。