C++ 调用ConnectNamedPipe时出现错误\u无效\u句柄
我正在尝试实现一个系统,其中任意数量的进程将通过命名管道相互通信。在Windows中实现了C++。但是,我被卡住了,因为进程似乎无法接收消息。我找不到类似的问题,如果已经有人问了,我道歉。无论如何,下面是与句柄创建相关的代码。我的想法是,我有n个(n=大约5或6个)进程,每个进程都有一个用于写入(pipesIn)和读取(pipesOut)的命名管道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[
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
;句柄首先是非常小的对象,与指针大小相同,所以按地址获取句柄对自己没有任何好处