Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
SRC modificato. Ho ancora problemi con il richiamo del file del server dopo l'aggiornamento a 'W'. Qualche suggerimento?
Ho lo stesso problema...
Penso che il mio problema sia nella linea writefile... invio solo una lettera. Se voglio inviare la parola UPDATE solo la U viene inviata...
Ho inviato il mio codice al signor angevoyageur. È un moderatore, se ho capito bene. Se mi aiuta, lo mando a voi...
Ho lo stesso problema...
Penso che il mio problema sia nella linea writefile... invio solo una lettera. Se voglio inviare la parola UPDATE solo la U viene inviata...
Ho inviato il mio codice al signor angevoyageur. È un moderatore, se ho capito bene. Se mi aiuta, lo mando a te...
Non so se questo ha qualche valore per risolvere i tuoi problemi o no, ma ricorda che nella nuova build di MT4, le stringhe sono caratteri Unicode larghi 16bit, non i soliti caratteri ASCII/ANSII a 8 bit.
I caratteri ASCII in Wide Unicode sono separati da byte ZERO, e poiché molte funzioni che lavorano con ASCII/ANSI terminano una stringa con un byte ZERO (ASCIIZ), di solito elaborano solo UN carattere. Un comportamento che hai appena descritto per il tuo caso "writefile".
Quindi assicurati di usare le funzioni appropriate che sono in grado di gestire e manipolare Wide Unicode e non ASCII/ANSI.
Grazie signore FMIC, penso che lei abbia ragione.
Sto testando e posterò i risultati.
Io mio lato app, in vb.net ho questo codice:
Questa linea chiama il namedpipe in mt4 e mt4 invia un messaggio per lui.
Provo a cambiare in CallNamedPipeW ma non succede niente.
Quindi torno con il modo ansi e leggo il risultato di cbRead. Se ho il testo in mt4 da inviare "123456" il cbRead è = 7. Metto qualsiasi testo, se lunghezza = 100 ricevo 101. Ma solo il primo carattere viene letto come in UPDATE dove ricevo U e cbRead = 7.
Per ottenere il valore in cbRead lo uso
il textInArray.length è sempre = 257. Se la mia stringa è UPDATE è 257 e se la mia stringa è UP è 257.
EDIT:
So perché è = 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 uso CallNamedPipeW ricevo l'errore numero 2 ERROR_FILE_NOT_FOUND
Qualsiasi successo amici. Anche io sono bloccato con il problema di comunicazione NamedPips sul nuovo MT4 build 600. Ho provato a cambiare 'A' con 'W' ma non funziona.
Non so se questo ha qualche valore per risolvere i tuoi problemi o no, ma ricorda che nella nuova build di MT4, le stringhe sono caratteri Wide Unicode a 16 bit, non i soliti caratteri ASCII/ANSII a 8 bit.
I caratteri ASCII in Wide Unicode sono separati da byte ZERO, e poiché molte funzioni che lavorano con ASCII/ANSI terminano una stringa con un byte ZERO (ASCIIZ), di solito processano solo UN carattere. Un comportamento che hai appena descritto per il tuo caso "writefile".
Quindi assicuratevi di usare le funzioni appropriate che sono in grado di gestire e manipolare Wide Unicode e non ASCII/ANSI.