Actualización del MQL4 600 y de los tubos con nombre - página 3

 

Ok, si mi problema cuando cambio al modo W unicode es para conectar la tubería en el lado MT4, así que creo que la cadena \\\\.\pipe\\mypipe no más una cadena simple, pero contienen los valores nulos como de FMIC dijo. Es por eso que no puedo conectar en mi lado vb.net porque cuando uso la misma cadena \\\\.\pipe\\mypipe no se encuentra y recibo el error 2.

Intento conectarme convirtiendo la cadena con el StringToCharArray pero la conexión de la tubería da error.

¿Tiene sentido? Gracias

 
hmm, estoy equivocado, por supuesto...si no cuando uso en el lado mt4 con el modo A ansi mi lado vb.net tampoco se conectará pero lo hace...
 

Uso esta línea de código para mostrarme todas las tuberías abiertas.

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

y mi tubería está ahí. Así que mt4 con el modo unicode "W" están creando la tubería y la espera de las conexiones. Si puedo crear en el mismo lado de mt4 un cliente de pipa puedo probar...

 
No sé qué hacer...
 
bisewski:
No sé qué hacer...
Puede publicar un resumen de su situación, ya que no está muy claro creo.
 

Abro un post en el foro de msdn porque creo que el problema está en mi lado de 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

Puedo crear la tubería con mi código mt4 pero no puedo conectar o llamar por ellos.

Cuando uso el modo ansi en mi programa vb.net, puedo conectar la tubería pero sólo recibo la primera letra. Así que cambio al modo unicode y sé que no puedo conectar... recibo el error 2.

Así que creo que mi ptoblem es ahora con mi código vb.net y no modo mi mql4.

Gracias por todos los ayudantes...

 

Si alguien sigue teniendo problemas con la gestión de los named pipes en MT4 v600, esta es la forma en que lo resolví:

  • Cambiando CreateNamedPipeA y CreateFileA, por CreateNamedPipeW y CreateFileW
  • Cambiando las declaraciones en ReadFile y WriteFile (Buffer), así, puedo trabajar con CharArrays (1 byte por carácter):
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 arrays de caracteres para comunicarse entre el servidor y el 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);
 

Gracias Oscarin por tu resumen.

 
Gracias sr...
 
oscarin:

Si alguien sigue teniendo problemas con la gestión de los named pipes en MT4 v600, esta es la forma en que lo resolví:

  • Cambiando CreateNamedPipeA y CreateFileA, por CreateNamedPipeW y CreateFileW
  • Cambiando las declaraciones en ReadFile y WriteFile (Buffer), así, puedo trabajar con CharArrays (1 byte por carácter):

  • Usando arrays de caracteres para comunicarse entre el servidor y el cliente:

Servidor:

Cliente:


¿En qué código has realizado los cambios indicados?

¿Alguien conoce esto?

Estoy ansioso por empezar a trabajar con pips con nombre en MT4 600+ aunque todavía no he podido encontrar una solución que funcione. Cualquier ayuda se agradece.