c++进程和C#进程之间通信的问题

先之 2008-06-06 09:01:22
现有一C++应用程序和一C#应用程序,C++应用程序用来进行数据处理,并向C#应用程序同步传递处理后的数据,而C#应用程序接收这些数据,并实时的绘制图像(之所以这么做,是因为有一个人熟悉C++,另一个熟悉C#,而且C++处理数据块,而C#绘图容易而且漂亮)。

注意:
1.两个应用程序之间传送的数据量非常大,例如传递10个长度为10000的Double型数组和10个长度为10000的string型数组。
2.两个应用程序之间通信非常频繁,而且要求是同步,即c++处理完数据,马上传递给C#,c#程序立即绘制成图。
3.两个应用程序处于同一台机子上,所以无需通过网络形式通信。


那么,这两个应用程序之间通信用什么方式实现好呢?命名管道,内存共享,或其他?求高手解决这个问题。

...全文
437 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
woszsj 2010-11-16
MARK
回复
outstand 2009-09-13
C++代码摘要:

HANDLE m_hMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF),

NULL,PAGE_READWRITE,0,0x1000,"ZZZOBJ");

void* m_pBaseMapFile=MapViewOfFile(m_hMapFile,

FILE_MAP_READ|FILE_MAP_WRITE, 0,0,0);

//这部分创建是没问题的,也可以对共享内存进行操作
//主要是在另一个C#项目中,没法打开映射

c# 代码摘要:
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr OpenFileMapping(int dwDesiredAccess,[MarshalAs(UnmanagedType.Bool)] bool bInheritHandle,string lpName);

IntPtr m_fm = OpenFileMapping(FILE_MAP_READ,false,"ZZZOBJ")

//返回的m_fm是0
//不知道是为什么?弄了好几天了,一直没有解决
回复
aimeast 2008-06-08
学习
回复
家鸣 2008-06-06
内存共享比较合适,通信不是问题,同步才是主要问题。
回复
HpyHacking 2008-06-06
楼主说的几种都差不多
pipeline 推荐
回复
先之 2008-06-06
[Quote=引用 2 楼 blackhero 的回复:]
WCF
[/Quote]
谢谢!
但是WCF应该是托管类的吧,而用C++写的是非托管类的,和C#能通信吗?
回复
wanghui0380 2008-06-06
直接用内存文件映射就可以了

内存文件映射需要使用api,这个对c++的人比较容易弄,c#的麻烦调用非托管代码,调试和转换很麻烦的说
回复
blackhero 2008-06-06
WCF
回复
先之 2008-06-06
补充一点,不需要通过web service和remoting等网络技术。
谢谢!
回复
发动态
发帖子
.NET Framework
创建于2007-09-28

1.7w+

社区成员

.NET技术 .NET Framework
申请成为版主
社区公告
暂无公告