Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows中使用命名管道(C+;+;/C) 我有一个C++应用程序,需要把网络上的图像实时发送到同一台PC上的C应用程序。C++代码不能从C代码中调用,所以我需要通过命名管道实现通信,以便发送图像。_C#_C++_Windows_Named Pipes_Interprocess - Fatal编程技术网

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

C# 在Windows中使用命名管道(C+;+;/C) 我有一个C++应用程序,需要把网络上的图像实时发送到同一台PC上的C应用程序。C++代码不能从C代码中调用,所以我需要通过命名管道实现通信,以便发送图像。,c#,c++,windows,named-pipes,interprocess,C#,C++,Windows,Named Pipes,Interprocess,我以前从未做过任何通信编程,我想知道如何解决这个问题 我的第一个想法是让C++应用程序在单独的线程上创建命名管道服务器,在创建线程之后,它将一直等待直到图像可用。在这一点上,它将发送图像 类似地,C#应用程序将创建一个充当客户端的新线程。它将连接到服务器并持续循环,直到映像可用。此时,它将接收图像并将其存储在主线程可以访问的队列中 这有意义吗?这是最好的方法吗?我赞成在这里使用COM。坦率地说,我会用C#编写COM对象,因为它比C++更简单。C#具有良好的COM互操作性。看见我编写了一个类似于M

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

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

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


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

我赞成在这里使用COM。坦率地说,我会用C#编写COM对象,因为它比C++更简单。C#具有良好的COM互操作性。看见我编写了一个类似于MS VSS COM的接口,可由Python(我们的构建系统)调用,与另一个供应商公开的C#.NET接口交互;因为它是低级COM,它也可以从JScript、C++、等等< /P>调用。
除非您要跨计算机和/或需要Windows安全性作为其中的一部分,否则我会避免使用命名管道,尽管您实际用于在对象上传输的内容可以是任何内容,可能取决于所涉及的大小/速率。

问得好,但我认为它属于programmers.stackexchange.com。这比那些通常属于它的概念更为概念化。如果你必须永久地存储这些图像,内存映射文件可能是更好的方法。因此,在C++应用程序的每一帧中,我将把整个图像存储在一个命名的内存映射文件中,然后可以从C语言应用程序中读取该文件。我是否仍需要像上面那样在每一侧创建一个新线程来处理对内存映射文件的读写操作?无论您使用何种解决方案通过磁盘文件传输数据,都将应用内存映射文件。就我个人而言,我会等待信号,而不是创建线程和轮询。你的想法听起来不错。或者,如果你熟悉COM,你可以在C++中构建一个COM组件,.NET可以访问并将相当快。