Visual Studio 2008 - 在C ++ / C#多项目解决方案中共享数据

时间:2009-11-17 22:15:47

标签: c# c++ visual-studio multi-project

我有一个包含2个项目的解决方案:

  1. 一个c ++主项目
  2. 一个c#项目(显示模拟器)
  3. 今天这两个应用程序使用环回TCP客户端/服务器连接共享数据,但这不是非常优化(时间问题......)。

    我想知道是否有办法直接从c ++项目访问c#数据,反之亦然? (似乎有可能用2个c#项目..) 如果不可能,用共享内存实现这个的最佳方法是什么?

    谢谢! 迈克尔

    编辑:谢谢你的回答。这两个项目曾经是独立的解决方案,都是可执行文件 - 我实际上是在尝试将2合1解决方案/可执行文件合并。 有关信息:c ++应用程序是嵌入式应用程序的PC版本 - c#app是一个lcd / HMI模拟器。

4 个答案:

答案 0 :(得分:1)

将C ++项目转换为C ++ / CLI项目可能是最简单的方法。但请注意,某些代码与C ++ / CLI不兼容(我们在使用托管可执行文件中使用boost :: thread的库时遇到了问题)。

答案 1 :(得分:0)

您可以使用COM InteropPlatform Invoke访问C#中的本机代码。

如果那不是你所要求的,请详细说明。

答案 2 :(得分:0)

命名管道?

对于通过命名管道的进程间通信,您可以查看.NET 3.5功能 对于C#方http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx。从C ++方面来看,我假设您知道等效的:)。

答案 3 :(得分:0)

我知道有两种方法可以在c ++和c#之间直接访问内存,而无需编组/解组和com的开销。如果需要保持代码的c ++部分本机,那么我知道实现此目的的唯一方法是从c ++应用程序托管clr。一项相对复杂的事业。谷歌“托管公共语言运行时”。然后,您可以将c#代码作为程序集加载,调用c#代码并提供通用的共享内存样式接口。虽然您必须自己编写所有共享内存支持,因为我发现在c#/ .net中没有直接支持共享内存。

另一种方法是使用公共语言运行时支持编译c ++代码。这是更容易的,并且将允许您获得c ++的所有功能和荣耀,同时允许访问基于clr的数据类型,以及在c ++和c#代码之间来回调用的能力。请参阅VS2008文档中的“用于定位CLR的语言功能”。 pin_ptr将成为你的亲密朋友和盟友。