繁体   English   中英

在C#和C ++代码之间共享对象

[英]Sharing objects between C# and C++ code

是否可以在C#和C ++代码之间共享对C​​#对象的引用而又不增加复杂性? 还是一般认为这是个坏主意?

在本机代码和托管代码之间共享C#对象的最佳解决方案是使用COM互操作。 这实际上使您可以在托管代码和C ++中的等效签名之间共享对象的接口。

至于事物的复杂性方面。 大多数COM互操作方案都是直截了当的,并且实际上并不比好的旧COM编程复杂。 在托管方面,它看上去与普通界面没有什么不同。

但是,一旦引入了多个线程或开始在COM公寓之间玩耍,事情就会变得有些棘手。

以我的经验,最简单的方法如下。

  • 在C#中定义要在C ++中使用的接口
  • 用ComVisible(true)属性标记接口
  • 在生成TLB文件的程序集上运行tlbexp
  • 将TLB导入到您的本机项目中

这将使接口定义进入两个项目。 如何在项目之间传递这些信息,需要对您的体系结构有更多的细节。

根据个人经验,我可以推荐的另一种解决方案是,如果要访问的C ++代码太大或太复杂,请在两者之间使用托管C ++接口。

例如,我在C#项目中使用RakNet C ++网络库。 解决方案是在C#中创建一个大型包装类以访问所需的C ++函数,围绕这些函数创建一个C ++包装器,然后将这些功能用作COM互操作或使用托管C ++(Visual C ++ / CLI)。

我选择了后者,这使我可以使用C ++访问RakNet库,但是创建的类可以像直接在其他.NET项目中直接使用。 因此,主要逻辑已在那些Managed C ++类中创建,这也使我可以使用.NET框架及其某些出色的功能。 在我的C#项目中,我只需要调用Managed C ++库即可为我提供执行所有功能所需的全部20个功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM