Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
SRC Editado. Todavía tiene problemas con la llamada al archivo del servidor después de actualizar a 'W'. ¿Alguna sugerencia?
Tengo el mismo problema...
Creo que mi problema está en la línea writefile... sólo envío una letra. Si quiero enviar la palabra UPDATE sólo se envía la U...
Le envié mi código al Sr. angevoyageur. El es un moderador si estoy en lo correcto. Si él me ayuda le envío a usted...
Tengo el mismo problema...
Creo que mi problema está en la línea writefile... sólo envío una letra. Si quiero enviar la palabra UPDATE sólo se envía la U...
Le envié mi código al Sr. angevoyageur. El es un moderador si estoy en lo correcto. Si él me ayuda le envío a usted...
No sé si esto tiene algún valor para resolver tus problemas o no, pero recuerda que en la nueva build de MT4, las cadenas son caracteres Unicode de 16 bits de ancho, no los habituales caracteres ASCII/ANSII de 8 bits.
Los caracteres ASCII en Wide Unicode están separados por CERO bytes, y como muchas funciones que trabajan con ASCII/ANSI terminan una cadena con un byte CERO (ASCIIZ), normalmente sólo procesarán UN carácter. Un comportamiento que acabas de describir para tu caso "writefile".
Así que asegúrate de que estás utilizando las funciones apropiadas que son capaces de manejar y manipular Wide Unicode y no ASCII/ANSI.
Gracias señor FMIC, creo que tiene razón.
Estoy probando y voy a publicar los resultados.
Yo mi lado de la aplicación, en vb.net tengo este código:
Esta línea llama al namedpipe en mt4 y mt4 envía un mensaje para él.
Intento cambiar a CallNamedPipeW pero no pasa nada.
Así que vuelvo con el modo ansi y leo el resultado de cbRead. Si tengo el texto en mt4 para enviar "123456" el cbReades = 7. Pongo cualquier texto, si la longitud = 100 recibo 101. Pero sólo se lee el primer carácter como en UPDATE donde recibo U y cbRead= 7.
Para obtener el valor en cbRead lo uso
el textInArray.length es siempre = 257. Si mi cadena es UPDATE es 257 y si mi cadena es UP es 257.
EDITAR:
Ya se porque es = 257:
Dim res As Integer = 0 Dim cbRead As Integer Dim textInLength As Integer Dim textOut() As Byte Dim textIn As String Dim textInArray() As Byte Message_To_MT4 = Comando 'La no script mql ele vai analisar o comando e nos responder. Abaixo, ele envia o comando e lê a resposta. textOut = System.Text.Encoding.Default.GetBytes(Message_To_MT4) textInLength = 256 ReDim textInArray(textInLength) Do 'Wait for a connection, block until a client connects 'Dim exists As Boolean = WaitNamedPipe(szPipeName, NMPWAIT_WAIT_FOREVER) Try res = CallNamedPipeA(szPipeName, textOut(0), Message_To_MT4.Length + 1, textInArray(0), textInLength, cbRead, PIPE_NOWAIT) Catch ex As Exception MsgBox(Err.LastDllError.ToString) End Try If Err.LastDllError = 231 Then Thread.Sleep(1000) Envia_APP_TO_MT4(Comando) Exit Sub End If If res = 0 Then Debug.Print(Err.LastDllError) 'significa que deu erro Server_PIPE.Text = "MT4 Server PIPE" Server_PIPE.Icon = New Icon("D:\ProgressError.ico") Else 'Conexão estabelecida 'string from MT4 = UPDATE textIn = "" MsgBox(cbRead.toString) '=7 MsgBox(textInArray.Length) '=257 For i = 0 To cbRead - 1 textIn = textIn & Chr(textInArray(i)) Next i MsgBox(textIn)
Si uso CallNamedPipeW recibo el error número 2 ERROR_FILE_NOT_FOUND
Cualquier éxito amigos. Yo también atascado con NamedPips problema de comunicación en la nueva MT4 construir 600. He probado para el cambio de 'A' a 'W' pero no funciona.
No sé si esto tiene algún valor para resolver sus problemas o no, pero recuerde que en la nueva construcción de MT4, las cadenas son caracteres Wide Unicode de 16 bits, no los habituales caracteres ASCII/ANSII de 8 bits.
Los caracteres ASCII en Wide Unicode están separados por CERO bytes, y como muchas funciones que trabajan con ASCII/ANSI terminan una cadena con un byte CERO (ASCIIZ), normalmente sólo procesarán UN carácter. Un comportamiento que acabas de describir para tu caso "writefile".
Así que asegúrese de que está utilizando las funciones apropiadas que son capaces de manejar y manipular Wide Unicode y no ASCII/ANSI.