Здравствуйте, очень нужна ваша помощь. Было создано приложение для работы с именованным каналом(код прикреплен). При тестировании выполнялся сначала первый пункт меню, потом второй, и вот при выполнении второго пункта функция ConnectNamedPipe возвращала код ошибки 6(ERROR_INVALID_HANDLE), при чем что странно, сначала при тестировании все работало, но после нескольких запусков перестала работать функция ConnectNamedPipe, функция CreateNamedPipe работает корректно. Перезагружал компьютер, переименовывал канал в коде, создавал новый проект - ничего не помогает. Вообще не знаю что делать, интернет весь перерыл, ничего не нашел. Помогите пожалуйста. В чем может быть проблема?
Код | #include <iostream> #include <Windows.h>
using namespace std;
int menu() { int choise = 0; cout << "1 - Create the Pipe" << endl; cout << "2 - Connect the Pipe" << endl; cout << "3 - Write to the Pipe" << endl; cout << "4 - Disconnect the Pipe" << endl; cout << "0 - Exit" << endl; cin >> choise; return choise; }
int main() {
setlocale(LC_ALL, "Russian"); ///* HANDLE hPipe = NULL; OVERLAPPED overlapped; overlapped.hEvent = CreateEvent(NULL, true, false, NULL); overlapped.Offset = 0; overlapped.OffsetHigh = 0; char buffer[512]; int choise = menu(); while (choise != 0) { switch (choise) { case 1: { HANDLE hPipe = CreateNamedPipe("\\\\.\\pipe\\myPipe1", PIPE_ACCESS_OUTBOUND | FILE_FLAG_OVERLAPPED | WRITE_DAC, PIPE_TYPE_MESSAGE | PIPE_WAIT, 1, 512, 512, 0, NULL); if (hPipe != INVALID_HANDLE_VALUE) { cout << "Pipe was created\n"; } else { cout << "Can't create the pipe\n"; system("pause"); } break; } case 2: { bool connected = ConnectNamedPipe(hPipe, NULL); if (connected) { cout << "Connected to the pipe\n"; } else { DWORD connectedError = GetLastError(); cout << connectedError; } //if (ConnectNamedPipe(hPipe, NULL)) { // cout << "Connected to the pipe\n"; //} //else { // cout << "Can't connect the pipe\n"; //} break; } case 3: { ZeroMemory(buffer, 0); cout << "Enter message: "; cin >> buffer; WriteFile(hPipe, buffer, strlen(buffer) + 1, NULL, &overlapped); WaitForSingleObject(overlapped.hEvent, INFINITE); cout << "Written\n"; break; } case 4: { DisconnectNamedPipe(hPipe); CloseHandle(overlapped.hEvent); } } cout << "\n"; choise = menu(); } system("pause");
|
|