Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# &引用;“管子坏了”;带C+的C净管+;后端(WINDOWS)_C#_C++_.net_Multithreading_Named Pipes - Fatal编程技术网

C# &引用;“管子坏了”;带C+的C净管+;后端(WINDOWS)

C# &引用;“管子坏了”;带C+的C净管+;后端(WINDOWS),c#,c++,.net,multithreading,named-pipes,C#,C++,.net,Multithreading,Named Pipes,所以我现在正在做一些有趣的管道工作。我有一个C++可注入DLL,我在一个过程中注入它来获取信息并报告给我的C语言GUI。我使用管道在后端和前端之间进行通信。这很好,但是当我尝试与C++进行可注射时,我收到了一个“管道被破坏”的错误。 < >我的C++ DLL中有以下内容: HANDLE Pipe = CreateNamedPipe("\\\\.\\pipe\\TestPipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE |

所以我现在正在做一些有趣的管道工作。我有一个C++可注入DLL,我在一个过程中注入它来获取信息并报告给我的C语言GUI。我使用管道在后端和前端之间进行通信。这很好,但是当我尝试与C++进行可注射时,我收到了一个“管道被破坏”的错误。 < >我的C++ DLL中有以下内容:

HANDLE Pipe = CreateNamedPipe("\\\\.\\pipe\\TestPipe",
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
999999,
999999,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);

void PipeThread() 
{
    int numbuff;
    DWORD dwRead;

    while (Pipe != INVALID_HANDLE_VALUE)
    {
        if (ConnectNamedPipe(Pipe, NULL) != FALSE)
        {
            if (ReadFile(Pipe, (LPVOID)numbuff, sizeof(int), &dwRead, NULL) != FALSE)
            {
                std::stringstream o;
                o << numbuff << "\r\n";
                Output(o.str());
                char buff[numbuff];
                while (ReadFile(Pipe, buff, numbuff, &dwRead, NULL) != FALSE)
                {
                    Output(std::string(buff)+"\r\n");
                }
            }
        }
        DisconnectNamedPipe(Pipe); 
    }
}

然而,当运行时,我从.NET得到一个“管道断开”错误。为什么会发生这种情况?

您是否尝试使用StreamWriter

private void按钮1\u单击(对象发送者,事件参数e)
{
如果(!已连接)
返回;
使用(var pipe=newnamedpipeclientstream(“.”,“TestPipe”,PipeDirection.Out))
{
使用(变量流=新StreamWriter(管道))
{
管道连接();
stream.Write(TextBox.Text);
管道冲洗();
}
}

}

您是否尝试使用StreamWriter

private void按钮1\u单击(对象发送者,事件参数e)
{
如果(!已连接)
返回;
使用(var pipe=newnamedpipeclientstream(“.”,“TestPipe”,PipeDirection.Out))
{
使用(变量流=新StreamWriter(管道))
{
管道连接();
stream.Write(TextBox.Text);
管道冲洗();
}
}

}

我一开始是这样做的,但当我的最终产品读到它们的顺序错误时,我遇到了问题。也许是冲洗它?stream.Flush();stream.Close();或者将AutoFlush设置为true?我开始这样做,但当我的最终产品读取它们时遇到了问题。也许是刷新它?stream.Flush();stream.Close();还是将自动刷新设置为真?
private void button1_Click(object sender, EventArgs e)
    {
        if (!connected)
            return;
        using (var pipe = new NamedPipeClientStream(".", "TestPipe", PipeDirection.Out))
        {
            pipe.Connect();
            byte[] outBuffer = Encoding.ASCII.GetBytes(TextBox.Text);
            byte[] strSize = BitConverter.GetBytes(outBuffer.Length);
            pipe.Write(strSize, 0, strSize.Length);
            pipe.Write(outBuffer, 0, outBuffer.Length);
            pipe.Flush();
        }
    }