在Windows中使用命名管道(C ++ / C#)

时间:2012-03-09 15:40:29

标签: c# c++ windows named-pipes interprocess

我有一个C ++应用程序需要将来自网络摄像头的图像实时发送到同一台PC上的C#应用​​程序。无法从C#代码调用C ++代码,因此我需要通过命名管道实现通信,以便通过图像发送。

我之前从未做过任何通信编程,我想知道如何解决这个问题。

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

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

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

1 个答案:

答案 0 :(得分: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安全性作为其中的一部分,否则我会避免使用命名管道,尽管实际用于传输对象的内容可能是任何东西,可能由大小/速率决定参与。