c# - 通过命名管道在 MQL5(或 C++)和 C# 之间进行交互

标签 c# c++ pipe named-pipes mql5

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

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

有人可以建议:

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

服务器:

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);
}

谢谢。

最佳答案

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

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

参数 PipeDirection.InOut 表示管道是双向的。

附言虽然这有点奇怪,因为结合 C# Server <-> C# Client 可以在两种模式下工作(In/Out 或其中之一)

关于c# - 通过命名管道在 MQL5(或 C++)和 C# 之间进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160777/

相关文章:

c# - 如何确保文件路径在 C# 中是安全的?

c# - NHibernate:用于检索非空一对一关联类的条件表达式

c++ - VirtualQuery 和线程安全

c - 通过父级执行命令时使用管道

powershell - 运行 help <command> 并将输出管道输出到Where-Object或Select-Object会返回空行

c# - Entity Framework 模型 - 不允许我添加某些表

c# - 如何创建一个在统一中充当按钮的模型?

c++ - 模板如何导致 C++ 中的代码膨胀?

c++ - QML 图像不加载图像源中具有非 ASCII 字符的图像

bash - 管道运行时增加 bash 变量