c# - 将图像从 C++ 进程发送到 C# 进程

标签 c# c++ image tcp udp

我正在尝试将图像数据从已编译的 C++ 进程发送到已编译的 C# 进程。 C++ 进程正在访问网络摄像头并对图像进行一些处理。图像由一个二维像素阵列表示,每个像素值是一个 8 位值 (0-255),这是该像素的灰度值。 图像大小为 640 x 480。

C# 应用程序进行更多处理并将此图像显示到屏幕上。这些进程同时在我的笔记本电脑(Windows 7 操作系统)上运行,但我无法创建一个执行所有步骤的进程,这就是为什么我需要我的 C++ 和 C# 代码进行通信。

我想知道最好的方法是什么?我阅读了有关在 C# 部分编写 UDP 或 TCP 服务器和在 C++ 部分编写客户端的信息,然后我可以将图像数据作为数据报发送。我想知道这是否是最好的方法,UDP 或 TCP 是否更好?

编辑:C++ 进程是非托管 C++,我无法选择将其作为托管 DLL 运行。我可以使用命名管道发送图像吗?

如果是在本地通信,UDP 最后能否保证顺序?我意识到图像会超过 UDP 的限制,但如果它是有序的,我应该能够拆分图像以发送。

最佳答案

进程间通信可以通过套接字或管道完成。

使用套接字(TCP 和 UDP),您实际上是通过 Internet 将数据发送给您自己。幸运的是,因为你的 comp 知道自己,所以数据不应该离开 comp,所以这应该很快。 TCP 保证是有序的,并且具有许多其他不错的功能,而 UDP 几乎是在数据上添加一些 header 并希望最好。对于这个应用程序,TCP 应该没问题。 UDP 增加了不必要的复杂性。

管道是让两个进程进行通信的另一种方式。您基本上让 C++ 或 C# 进程创建一个管道并启动另一个进程。您只需像文件一样使用管道:写入和读取它。这可以在 C/C++ 中使用 pipeforkexec 函数的组合或简单地使用 popen功能。 C# 可能有类似的功能。

我建议使用一个使用 _popen 的管道,(对于 windows 是 popen)并将一系列整数写入管道并从另一端读取它。这可能是最简单的方法...当然除了使用一种语言...

关于c# - 将图像从 C++ 进程发送到 C# 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591271/

相关文章:

c++ - 如何使用 gdb 查看 C++ 类在内存中的布局?

html - css 阴影未正确应用在图像底部

image - 如何在vb6中将bmp转换为jpg

c++ - 如何按其 .second 参数对 map 进行排序

c# - 编写适用于 MVC 和 Web API 请求的过滤器

c# - 方法重载解析和 Jon Skeet 的脑筋急转弯

c# - 在 WinForms 应用程序中将按钮样式设置为 FlatStyle.System 时出现 System.ObjectDisposedException

c++ - Linux perf 不解析符号

javascript - 使用 javascript 或 jquery 触发图像加载

c# - Mvvm Light、UWP 和代码隐藏