Ich versuche ein System zu implementieren, wo eine beliebige Anzahl von Prozessen über Named Pipes miteinander kommunizieren würde. Die Implementierung erfolgt in C++ in Windows. Ich stecke jedoch fest, weil die Prozesse anscheinend keine Nachrichten empfangen können. Ich konnte keine ähnliche Frage finden, ich entschuldige mich, wenn es schon gefragt wurde. Wie auch immer, hier ist der Code für die Erstellung von Handles. Die Idee ist, dass ich n (n = ca. 5 oder 6) Prozesse habe und jeder Prozess hat eine benannte Pipe zum Schreiben (PipesIn) und Lesen (PipesOut).ERROR_INVALID_HANDLE beim Aufruf von ConnectNamedPipe
pipesIn = std::vector<HANDLE *>();
pipesOut = std::vector<HANDLE *>();
this->name = name;
wchar_t pipeName[20];
for (int i = 0; i < total; i++) {
if (i != name) {
HANDLE hIn;
swprintf(pipeName, L"\\\\.\\pipe\\Pipe(%d,%d)", name, i);
do {
hIn = CreateNamedPipe(pipeName,
PIPE_ACCESS_DUPLEX | PIPE_TYPE_BYTE | PIPE_READMODE_BYTE, // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
PIPE_WAIT,
1,
1024 * 16,
1024 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
} while (hIn == INVALID_HANDLE_VALUE);
pipesIn.push_back(&hIn);
}
}
for (int i = 0; i < total; i++) {
if (i != name) {
HANDLE hOut;
swprintf(pipeName, L"\\\\.\\pipe\\Pipe(%d,%d)", i, name);
do {
hOut = CreateFile(pipeName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
} while (hOut == INVALID_HANDLE_VALUE);
pipesOut.push_back(&hOut);
}
else {
pipesIn.push_back(NULL);
pipesOut.push_back(NULL);
}
}
Das Problem, das ich habe, ist in meiner Empfangsfunktion. Wenn ich ConnectNamedPipe aufrufen, ist Ergebnis 0, und GetLastError() gibt ERROR_INVALID_HANDLE zurück.
Da ich irgendwie neu in C++ bin und Rohre benutze, ergibt das für mich nicht viel Sinn. Ich habe versucht, die Methode der Kommunikation Beispiel here zu replizieren. Jede Art von Rat wird als nützlich erachtet.