.net - 如何使命名管道在 C++ 和 .NET 之间工作?

标签 .net c++ ipc pipe named-pipes

让命名管道在 C++ 和 .NET 之间工作让我经历了一段非常艰难的时期。 我在创建可在 2 个 c++ 应用程序或 2 个 .NET 应用程序之间工作的命名管道时没有遇到任何问题。

最佳答案

我对这种沟通没有问题,我在一些项目中使用了这个场景。

C++ 方面:

LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\pipename");
CHAR chReadBuf[1024];
DWORD cbRead;
BOOL fResult;  

fResult = CallNamedPipe( 
    lpszPipename,          // pipe name 
    _Message,              // message to server 
    strlen(_Message),      // message length 
    chReadBuf,             // buffer to receive reply 
    sizeof(chReadBuf),     // size of read buffer 
    &cbRead,               // number of bytes read 
    NMPWAIT_WAIT_FOREVER); // wait;-) 

在 C# 端:

    public string GetMessageFromPipe()
    {
        int _lenght = 0;

        /*
         * Pipe Control Block
         */
        _pipeserver.WaitForConnection();

        do
        {
            _lenght += _pipeserver.Read(_buffer, _lenght, _buffer.Length);
        }
        while (!_pipeserver.IsMessageComplete);

        _pipeserver.Disconnect();
        /*
         * End of Pipe Control Block
         */

        if (_lenght == 0)
        {
            throw new ArgumentException("Message is empty ;-(");
        }

        return Encoding.UTF8.GetString(_buffer, 0, _lenght);
    }

管道创建:

_pipeserver = new NamedPipeServerStream("pipename",
  PipeDirection.InOut, 254, PipeTransmissionMode.Message,
  PipeOptions.Asynchronous, 262144, 262144);

关于.net - 如何使命名管道在 C++ 和 .NET 之间工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961164/

相关文章:

c# - 根据 TextWriter 输入 wpf 为 ListView 分配背景颜色

c++ - OpenGL 计算法线(四边形)

c++ - Qt中使用SQL对表格元素进行非常规排序

c# - 如何在不写入磁盘的情况下将 XML 从 Delphi 传递到 C#?

python - 关闭前冲洗管道 (os.pipe)

.net - 如何从应用程序内启动 ClickOnce 应用程序的卸载?

c# - 如何检查当前线程的单元状态?

.net - .NET 中的全局变量(或替代)最佳实践

c++ - 是否有检查前提条件的原子增量,即原子值小于指定值?

c++ - C++ IPC通讯