MQL5(或C++)和C#之间通过命名管道的交互
Interaction between MQL5 (or C++) and C# via Named Pipes
我正试图通过命名管道发送一些数据。我在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);
}
谢谢。
找到答案。这似乎只是我自己的错误,或者这就是管道在MQL中的工作方式-通道总是需要双工,所以C#中的行需要用以下内容替换:
NamedPipeServerStream pipeStream = new NamedPipeServerStream(name, PipeDirection.InOut, 1, PipeTransmissionMode.Byte)
参数PipeDirectionInOut表示管道是双向的。
附言:尽管这有点奇怪,因为连接C#服务器<->C#客户端可以在两种模式下工作(输入/输出或其中一种)
服务器:C#/客户端:MetaTrader
我还有两个问题:
- 需要以管理员身份运行的客户端和服务器
- 我需要为输入和输出设置缓冲区大小(默认值为零=>动态计算=>存在错误)
相关文章:
- Qt VTK交互风格的信号到小部件
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- IPC使用多个管道和分支进程来运行Python程序
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何创建函数管道,以便函数一个接一个地运行?
- Gstreamer 管道从命令 lne 到 c 代码
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 复制和交换习惯用法与移动操作之间的交互
- 将旧管道转换为现代 openGL 时出现问题
- 如何使用管道在父级和子级之间来回传递文件
- 在没有管理员权限的情况下连接到同一网络中的命名管道
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- 如何测量管道延迟?
- 我如何使用此程序管道多个命令?C++
- 先进先出:一个进程永远不会从管道读取
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- Qt QGraphicsProxyWidget 与 QGraphicsScene 的交互
- 使用模板而不是虚拟方法的管道模式
- 我可以写入关闭的套接字并强制纠正损坏的管道错误吗?
- MQL5(或C++)和C#之间通过命名管道的交互