Я пытаюсь отправить некоторые данные через именованные каналы. Я создал Named Pipe Server на C # и клиент на MQL5 (это просто оболочка C ++). Сервер работает нормально и может быть получен из клиента именованных каналов, написанного на C #, поэтому связь C # <-> C # работает отлично. Также я попробовал утилиту PipeList, и она также показывает, что мой труба-сервер видна и доступна.
Единственная проблема с клиентом, написанным на MQL5 (C ++) — он не находит путь к трубе, поэтому связь MQL <-> C # терпит неудачу.
Кто-нибудь может предложить:
Сервер:
NamedPipeServerStream pipeStream = new NamedPipeServerStream("MQL5", PipeDirection.In, 1, PipeTransmissionMode.Byte)
Я также пробовал полный путь \\\\. \\ pipe \\ MQL5, но безуспешно
Клиент:
CFilePipe iPipe;
while(IsStopped() == false)
{
Print("This loop is infinite because there is no connection");
if (iPipe.Open("\\\\.\\pipe\\MQL5", FILE_READ | FILE_WRITE | FILE_BIN) != INVALID_HANDLE) break;
Sleep(250);
}
Благодарю.
Ответ найден. Кажется, это была просто моя собственная ошибка или так работает Pipes в MQL — канал всегда должен быть дуплексным, поэтому строку в C # нужно заменить следующим:
NamedPipeServerStream pipeStream = new NamedPipeServerStream(name, PipeDirection.InOut, 1, PipeTransmissionMode.Byte)
Параметр PipeDirection.InOut говорит, что труба двухсторонняя.
Постскриптум Хотя это немного странно, потому что соединение C # Server <-> Клиент C # может работать в обоих режимах (вход / выход или один из них)
Сервер: C # / Клиент: MetaTrader
У меня были две другие проблемы: