2012-03-09 78 views
4

我有一个C++应用程序需要将图像从网络摄像头实时发送到同一台PC上的C#应用​​程序。 C++代码不能从C#代码中调用,所以我需要通过命名管道实现通信才能发送图像。在Windows中使用命名管道(C++/C#)

我从来没有做过任何通信编程,我想知道如何解决这个问题。

我的第一个想法是让C++应用程序在一个单独的线程上创建命名管道服务器,创建后线程会一直等待,直到图像可用于发送。此时它会发送图像。

类似地,C#应用程序将创建一个充当客户端的新线程。它将连接到服务器并不断循环,直到图像可用。此时它会接收图像并将其存储在主线程可以访问的队列中。

这是否有意义?这是最好的方法吗?

+1

好问题,但我认为它属于程序员.stackexchange.com。这比那些通常属于这里的更概念化。 – NotMe 2012-03-09 15:46:12

+0

如果您必须永久存储这些图像,内存映射文件可能是更好的方法。 – Flot2011 2012-03-09 15:52:07

+0

那么在C++应用程序中的每一帧上,我都会将整个图像存储在一个命名的内存映射文件中,然后可以从C#应用程序读取该文件?我是否还需要在上面的每一边创建一个新线程来处理读写内存映射文件? – Jkh2 2012-03-09 16:13:51

回答

0

我第二次在这里使用COM的概念。坦率地说,我会用C#编写COM对象,因为它比C++更容易。 C#具有很好的COM互操作性。请参阅http://msdn.microsoft.com/en-us/library/aa645712%28v=vs.71%29.aspx。我编写了一个类似MS VSS的COM接口,可由Python(我们的构建系统)调用,并与另一个供应商公开的C#.NET接口连接;因为它的COM低,它也可以从JScript,C++等调用。除非你要跨机器和/或需要Windows安全性作为其中的一部分,我会避免命名管道,尽管你实际上用于在物体上传输的信息可能是任何事情,可能是由涉及的大小/速率决定的。