使用命名管道将图像从 C++ 发送到 C# 应用程序

Posted

技术标签:

【中文标题】使用命名管道将图像从 C++ 发送到 C# 应用程序【英文标题】:Send image from C++ to C# application using Named Pipe 【发布时间】:2018-05-30 05:42:45 【问题描述】:

我了解了命名管道并尝试从 C++ 和 C# 应用程序发送消息,它工作正常。但我无法使用命名管道将图像从 C++ 端发送到 C#。谁能告诉我如何做到这一点。

我的命名管道 C# 代码

static void Main(string[] args)
    
        Console.WriteLine("Creating Client Pipe");
        NamedPipeClientStream pipe = new NamedPipeClientStream(".", "HyperPipe", PipeDirection.InOut);
        Console.WriteLine("Pipe Created Successfully, Connecting to Server");
        pipe.Connect();
        Console.WriteLine("Successfully, Connected to Server");
        using (StreamReader rdr = new StreamReader(pipe, Encoding.Unicode))
        
            System.Console.WriteLine("Message from Server: " + rdr.ReadToEnd());
        

        Console.ReadKey();
    

C++代码

int _tmain(int argc, _TCHAR* argv[])

    cout << "Server Creating Pipe\n";
    HANDLE hPipe = ::CreateNamedPipe(_T("\\\\.\\pipe\\HyperPipe"),
        PIPE_ACCESS_DUPLEX,
        PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
        PIPE_UNLIMITED_INSTANCES,
        4096,
        4096,
        0,
        NULL);

    cout << "Server Created Succesfully";
    ConnectNamedPipe(hPipe, NULL);

    LPTSTR data = _T("Hello");
    cout << "Sending Message to Client";
    DWORD bytesWritten = 0;
    WriteFile(hPipe, data, _tcslen(data) * sizeof(TCHAR), &bytesWritten, NULL);
    CloseHandle(hPipe);
    return 0;

我想要的是当我在 C# 端输入路径时,它会将其发送到 C++ 并使用 OpenCV 库我将从内存中获取该图像并发送到 C#。

提前致谢

【问题讨论】:

为什么会起作用? 该代码正在运行,先生 那么问题是什么? 我无法将图像从 C++ 发送到 C#。 代码示例的哪一部分打算实现这一点? 【参考方案1】:

您是否尝试过将图像转换为字节数组,然后以与文本相同的方式发送它?

【讨论】:

不,但我想我应该试试这个,谢谢。 嗨,Jakub,我已经尝试过了,但无法做到这一点。如果可能的话,您能否提供我的代码。 这是在 C# 中执行此操作的简单解决方案***.com/questions/3801275/… 对于 C++ 你可以使用这个库imagemagick.org/script/magick-core.php 很好,然后使用它将图像转换为您的字节数组。您始终可以在 1 个项目中使用多个库。

以上是关于使用命名管道将图像从 C++ 发送到 C# 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 C++ 发送到 C# [重复]

使用名称管道将结构从 C# 应用程序传递到 C++ 服务器?

快速发送进程间信号

使用命名管道的两种 C++ 到 C# 通信

从 VB6 到 WCF 的命名管道

C++ 中的序列化和 C# 中的反序列化,对于命名管道,反之亦然