C++ 调用ConnectNamedPipe时出现错误\u无效\u句柄

C++ 调用ConnectNamedPipe时出现错误\u无效\u句柄,c++,windows,process,named-pipes,C++,Windows,Process,Named Pipes,我正在尝试实现一个系统,其中任意数量的进程将通过命名管道相互通信。在Windows中实现了C++。但是,我被卡住了,因为进程似乎无法接收消息。我找不到类似的问题,如果已经有人问了,我道歉。无论如何,下面是与句柄创建相关的代码。我的想法是,我有n个(n=大约5或6个)进程,每个进程都有一个用于写入(pipesIn)和读取(pipesOut)的命名管道 pipesIn=std::vector(); pipesOut=std::vector(); 此->名称=名称; wchar_t pipeName[

我正在尝试实现一个系统,其中任意数量的进程将通过命名管道相互通信。在Windows中实现了C++。但是,我被卡住了,因为进程似乎无法接收消息。我找不到类似的问题,如果已经有人问了,我道歉。无论如何,下面是与句柄创建相关的代码。我的想法是,我有n个(n=大约5或6个)进程,每个进程都有一个用于写入(pipesIn)和读取(pipesOut)的命名管道

pipesIn=std::vector();
pipesOut=std::vector();
此->名称=名称;
wchar_t pipeName[20];
对于(int i=0;i
我的问题是我的接收功能。调用ConnectNamedPipe时,结果为0,GetLastError()返回错误\u无效\u句柄

char response[20];
    DWORD dwRead;

    bool recieved = false;
    while (!recieved) {
        bool flag = false;
        for (int i = 0; i < pipesIn.size(); i++) {
            if (name == i) {
                continue;
            }
            if (ConnectNamedPipe(pipesIn.at(i), NULL) != FALSE) {
                while (ReadFile(*(pipesIn.at(i)), response, sizeof(response) - 1, &dwRead, NULL) != FALSE)
                {
                    response[dwRead] = '\0';
                    recieved = true;
                    break;
                }
            }
            else {
                printf("%d\n", GetLastError());
            }
        }
    }
char响应[20];
德沃德·德雷德;
bool received=假;
当(!收到){
布尔标志=假;
对于(int i=0;i

<>因为我对C++和管都有点陌生,这对我来说没什么意义。我试着复制例子中的沟通方法。任何一种建议都会被认为是有用的。

你把事情不必要地复杂化,这是对自己的致命一击

        pipesIn.push_back(&hIn);
这是你的问题
hIn
是一个堆栈局部变量,它位于作用域的末尾,但是您要获取堆栈上该位置的地址并保存它


解决方案是让你的向量成为一个
std::vector
;手柄首先是非常小的对象,与指针大小相同,因此按地址取手柄并没有给自己带来任何好处。

不必要地使事情复杂化,这是对自己的伤害

        pipesIn.push_back(&hIn);
这是你的问题
hIn
是一个堆栈局部变量,它位于作用域的末尾,但是您要获取堆栈上该位置的地址并保存它

解决方案是让你的向量成为一个
std::vector
;句柄首先是非常小的对象,与指针大小相同,所以按地址获取句柄对自己没有任何好处