Atualização MQL4 600 & Tubos Nomeados - página 3

 

Ok, se meu problema quando mudo para o modo W unicode é conectar o tubo no lado MT4, então eu acho que a corda \\\\.{\i1}pipe]{\i1}micpipe não é mais uma simples corda, mas contém os valores nulos como disse de FMIC. Então é por isso que não posso conectar no meu lado vb.net porque quando uso a mesma corda \\\\.|pipe=mypipe não é encontrada e eu recebo o erro 2.

Eu tento conectar a corda com o StringToCharArray, mas a conexão do tubo recebeu o erro.

Faz sentido? Obrigado

 
hmm, estou errado, fora de curso...senão se quando eu usar no lado mt4 com A ansi mode meu lado vb.net também não se conectará, mas conectará...
 

Eu uso este código de linha para me mostrar todos os tubos abertos.

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

e meu tubo está lá. Portanto, o mt4 com modo unicode "W" está criando a tubulação e esperando por conexões. Se eu puder criar no mesmo lado do mt4 um cliente de tubo que eu possa testar...

 
Eu não sei o que fazer...
 
bisewski:
Eu não sei o que fazer...
Você pode publicar um resumo de sua situação, pois não está muito claro, penso eu.
 

Abro um post no fórum msdn porque acho que o problema está no meu lado 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

Posso criar o tubo com meu código mt4, mas posso conectá-lo ou ligar para eles.

Quando uso o modo ansi em meu programa vb.net, posso conectar a tubulação, mas recebo apenas a primeira letra. Então eu mudo para o modo unicode e sei que não posso conectar...recebo o erro 2.

Então eu acho que meu ptoblem agora está com meu código vb.net e não modo meu mql4.

Obrigado a todos os ajudantes...

 

Se alguém ainda tem problemas para administrar tubos nomeados em MT4 v600, esta é a maneira como resolvi o problema:

  • Alterando CreateNamedPipeA e CreateFileA, com CreateNamedPipeW e CreateFileW
  • Mudando as declarações em ReadFile e WriteFile (Buffer), assim, posso trabalhar com CharArrays (1 byte por personagem):
int WriteFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

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

  • Usando CharArrays para comunicar entre o servidor e o cliente:

Servidor:

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

Cliente:

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

Obrigado Oscarin por seu resumo.

 
Obrigado sr....
 
oscarin:

Se alguém ainda tem problemas para administrar tubos nomeados em MT4 v600, esta é a maneira como resolvi o problema:

  • Alterando CreateNamedPipeA e CreateFileA, com CreateNamedPipeW e CreateFileW
  • Mudando as declarações em ReadFile e WriteFile (Buffer), assim, posso trabalhar com CharArrays (1 byte por personagem):

  • Usando CharArrays para comunicar entre o servidor e o cliente:

Servidor:

Cliente:


Em que código você realizou as mudanças indicadas?

Alguém sabe disso?

Estou ansioso para começar a trabalhar com pips nomeados no MT4 600+, embora ainda não tenha conseguido encontrar uma solução de trabalho. Qualquer ajuda muito apreciada!

Razão: