更新MQL4 600和命名管道 - 页 3

 

好吧,如果我的问题,当我改变到模式W unicode是连接管道在侧MT4,所以我的东西,字符串\\\\.\pipe\mypipe不再是一个简单的字符串,但包含空值,像德FMIC说。这就是为什么我不能在我的vb.net端连接,因为当我使用相同的字符串\\\\.\pipe\mypipe时没有找到,我收到错误2。

我尝试用StringToCharArray转换字符串,但管道连接出错。

有意义吗?谢谢

 
嗯,我错了,当然......否则,如果我在mt4端使用A ansi模式时,我的vb.net端也将无法连接,但它可以......
 

我使用这行代码来显示我所有打开的管道。

Dim listOfPipes As [String]() = System.IO.Directory.GetFiles("\\.\pipe\")

而我的管道就在那里。所以mt4的unicode模式 "W "正在创建管道并等待连接。如果我可以在同一个mt4端创建一个管道客户端,我可以测试...

 
我不知道该怎么做......
 
bisewski:
我不知道该怎么做......
你能不能把你的情况总结一下,因为我觉得不是很清楚。
 

我在msdn论坛上发了一个帖子,因为我觉得问题出在我的vb.net方面。

http://social.msdn.microsoft.com/Forums/en-US/409d4a2d-0a88-4094-9f0c-403798a2ce3d/pipe-unicode-mode-not-connecting-like-ansi-mode?forum=vbgeneral

我可以用我的mt4代码创建管道,但我不能连接或调用它们。

当我在vb.net程序中使用ansi模式时,我可以连接管道,但我只收到第一个字母。所以我改成unicode模式,我知道我不能连接......我收到错误2。

所以我认为我的问题是我的vb.net代码,而不是我的mql4模式。

谢谢所有的帮助...

 

如果有人在MT4 v600中仍有管理命名管道的 问题,这是我解决的方法。

  • 将 CreateNamedPipeA 和 CreateFileA 改为 CreateNamedPipeW 和 CreateFileW
  • 改变ReadFile和WriteFile(Buffer)中的声明,因此,我可以使用CharArrays(每个字符一个字节)。
int WriteFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

int ReadFile(int FileHandle, uchar & BufferPtr[], int BufferLength, int & BytesRead[], int PassAsZero);

  • 使用Char数组在服务器和客户端之间进行通信。

服务器。

string ReadBuffer = "";
uchar Buff_in[200];
int BytesRead[1] = {0};
ReadFile(glbPipe[PipeIndex], Buff_in, 200, BytesRead, 0);
ReadBuffer = CharArrayToString(Buff_in,0,BytesRead[0]);
if (BytesRead[0] > 0) {
   strReturnValue = StringConcatenate(strReturnValue, ReadBuffer);   
   TotalBytesRead += BytesRead[0];
} 

客户端。

uchar Mess_char[];
StringToCharArray(Message, Mess_char,0);
WriteFile(PipeHandle, Mess_char, StringLen(Message), BytesWritten, 0);
 

谢谢Oscarin的总结。

 
谢谢sr...
 
oscarin:

如果有人在MT4 v600中仍有管理命名管道的问题,这是我解决的方法。

  • 将 CreateNamedPipeA 和 CreateFileA 改为 CreateNamedPipeW 和 CreateFileW
  • 改变ReadFile和WriteFile(Buffer)中的声明,因此,我可以使用CharArrays(每个字符一个字节)。

  • 使用Char数组在服务器和客户端之间进行通信。

服务器。

客户端。


你在什么代码中进行了所述的修改?

有谁知道这个吗?

我很想在MT4 600+中开始使用命名的点数,尽管我还没有找到一个有效的解决方案。非常感谢任何帮助!