MQL5(或C++)和C#之间通过命名管道的交互

本文关键字:管道 交互 之间 C++ MQL5 | 更新日期: 2023-09-27 18:27:12

我正试图通过命名管道发送一些数据。我在C#中创建了命名管道服务器,在MQL5中创建了客户端(它只是一个C++包装器)。服务器运行良好,可以从用C#编写的命名管道客户端访问,因此通信C#<->C#运行良好。我还尝试了实用工具PipeList,它还显示了我的管道服务器是可见的和可用的。

唯一的问题是用MQL5(C++)编写的客户端-它找不到管道服务器的路径,因此通信MQL<->C#正在失败

有人能建议吗:

  • 我做错了什么
  • 如何检查C#和MQL是否正在访问相同的物理路径和相同的位置

服务器:

NamedPipeServerStream pipeStream = new NamedPipeServerStream("MQL5", PipeDirection.In, 1, PipeTransmissionMode.Byte) 

我还尝试了完整路径''''''''''''管道''''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);
}

谢谢。

MQL5(或C++)和C#之间通过命名管道的交互

找到答案。这似乎只是我自己的错误,或者这就是管道在MQL中的工作方式-通道总是需要双工,所以C#中的行需要用以下内容替换:

NamedPipeServerStream pipeStream = new NamedPipeServerStream(name, PipeDirection.InOut, 1, PipeTransmissionMode.Byte)

参数PipeDirectionInOut表示管道是双向的。

附言:尽管这有点奇怪,因为连接C#服务器<->C#客户端可以在两种模式下工作(输入/输出或其中一种)

服务器:C#/客户端:MetaTrader

我还有两个问题:

  1. 需要以管理员身份运行的客户端和服务器
  2. 我需要为输入和输出设置缓冲区大小(默认值为零=>动态计算=>存在错误)