Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
SRC Edited. Ainda tendo problemas com a chamada ao arquivo do servidor após a atualização para 'W'. Alguma sugestão?
Eu tenho o mesmo problema...
Acho que meu problema está na linha do arquivo escrito... Eu só envio uma carta. Se eu quiser enviar a palavra UPDATE apenas os U são enviados...
envio meu código para o Sr. angevoyageur. Ele é um moderador, se eu estiver correto. Se ele me ajudar eu envio a você...
Eu tenho o mesmo problema...
Acho que meu problema está na linha do arquivo escrito... Eu só envio uma carta. Se eu quiser enviar a palavra UPDATE apenas os U são enviados...
envio meu código para o Sr. angevoyageur. Ele é um moderador se eu estiver correto. Se ele me ajudar eu envio a você...
Não sei se isto tem algum valor para resolver seus problemas ou não, mas lembre-se que na nova construção do MT4, as cordas são caracteres Unicode de 16 bits, não os habituais caracteres ASCII/ANSII de 8 bits.
Os caracteres ASCII em Wide Unicode são separados por bytes ZERO, e como muitas funções que funcionam com ASCII/ANSI terminam uma string com um byte ZERO (ASCIIZ), geralmente eles processam apenas UM caractere. Um comportamento que você acabou de descrever para o seu caso "writefile".
Portanto, certifique-se de estar usando as funções apropriadas que são capazes de manusear e manipular Wide Unicode e não ASCII/ANSI.
Obrigado Senhor FMIC, acho que o senhor está correto.
Estou testando e vou postar os resultados.
Eu tenho este código no vb.net:
Esta linha chama o tubo nomeado em mt4 e o mt4 envia uma mensagem para ele.
Eu tento mudar para CallNamedPipeW, mas qualquer coisa acontece.
Então eu volto com ansi mode e leio o resultado cbRead. Se eu tiver o texto em mt4 para enviar "123456" o cbRead é = 7. Coloco qualquer texto, se comprimento = 100 eu recebo 101. Mas somente a primeira letra é lida como em UPDATE onde recebo U e cbRead = 7.
Para obter o valor em cbLeio-o uso
o textoInArray.length é sempre = 257. Se minha string é UPDATE é 257 e se minha string é UPDATE é 257.
EDIT:
Eu sei porque é = 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)
Se eu usar CallNamedPipeW recebo o número de erro 2 ERROR_FILE_NOT_FOUND
Qualquer amigo de sucesso. Eu também fiquei preso à questão da comunicação da NamedPips no novo MT4 build 600. Eu testei a mudança de 'A' para 'W', mas não funcionou.
Não sei se isto tem algum valor para resolver seus problemas ou não, mas lembre-se que na nova construção do MT4, as cordas são caracteres Unicode de 16 bits, não os habituais caracteres ASCII/ANSII de 8 bits.
Os caracteres ASCII em Wide Unicode são separados por bytes ZERO, e como muitas funções que funcionam com ASCII/ANSI terminam uma string com um byte ZERO (ASCIIZ), geralmente eles processarão apenas UM caractere. Um comportamento que você acabou de descrever para o seu caso "writefile".
Portanto, certifique-se de estar usando as funções apropriadas que são capazes de manusear e manipular Wide Unicode e não ASCII/ANSI.