Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
SRC Edited. J'ai toujours des problèmes pour appeler le fichier du serveur après la mise à jour vers 'W'. Des suggestions ?
J'ai le même problème...
Je pense que mon problème se situe au niveau de la ligne writefile... Je n'envoie qu'une seule lettre. Si je veux envoyer le mot UPDATE seul le U est envoyé...
J'ai envoyé mon code à M. angevoyageur. C'est un modérateur si je ne me trompe pas. S'il m'aide, je vous envoie...
J'ai le même problème...
Je pense que mon problème se situe au niveau de la ligne writefile... Je n'envoie qu'une seule lettre. Si je veux envoyer le mot UPDATE seul le U est envoyé...
J'ai envoyé mon code à M. angevoyageur. C'est un modérateur si je ne me trompe pas. S'il m'aide, je vous envoie...
Je ne sais pas si cela peut vous aider à résoudre votre problème, mais rappelez-vous que dans la nouvelle version de MT4, les chaînes de caractères sont des caractères Unicode 16 bits, et non les caractères ASCII/ANSII 8 bits habituels.
Les caractères ASCII en Wide Unicode sont séparés par des octets ZERO, et comme de nombreuses fonctions qui travaillent avec ASCII/ANSI terminent une chaîne par un octet ZERO (ASCIIZ), elles ne traiteront généralement qu'UN seul caractère. Un comportement que vous venez de décrire pour votre cas "writefile".
Assurez-vous donc que vous utilisez les fonctions appropriées qui sont capables de traiter et de manipuler Wide Unicode et non ASCII/ANSI.
Merci Monsieur FMIC, je pense que vous avez raison.
Je suis en train de tester et je vais poster les résultats.
Du côté de mon application, en vb.net, j'ai ce code :
Cette ligne appelle le namedpipe dans mt4 et mt4 envoie un message pour lui.
J'essaie de changer pour CallNamedPipeW mais rien ne se passe.
Donc je reviens en mode ansi et je lis le résultat de cbRead. Si j'ai le texte dans mt4 pour envoyer "123456" le cbRead est = 7. Je mets n'importe quel texte, si la longueur = 100 je reçois 101. Mais seulement le premier caractère est lu comme dans UPDATE où je reçois U et cbRead = 7.
Pour obtenir la valeur dans cbRead je l'utilise
le textInArray.length est toujours = 257. Si ma chaîne est UPDATE est 257 et si ma chaîne est UP est 257.
EDIT :
Je sais pourquoi is = 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 j'utilise CallNamedPipeW je reçois l'erreur numéro 2 ERROR_FILE_NOT_FOUND
Tout succès les amis. Je suis également bloqué par le problème de communication de NamedPips sur le nouveau MT4 build 600. J'ai testé le changement de 'A' en 'W' mais cela ne fonctionne pas.
Je ne sais pas si cela peut vous aider à résoudre vos problèmes, mais rappelez-vous que dans la nouvelle version de MT4, les chaînes de caractères sont des caractères Unicode 16 bits, et non les caractères ASCII/ANSII 8 bits habituels.
Les caractères ASCII en Wide Unicode sont séparés par des octets ZERO, et comme de nombreuses fonctions qui travaillent avec ASCII/ANSII terminent une chaîne par un octet ZERO (ASCIIZ), elles ne traitent généralement qu'UN seul caractère. Un comportement que vous venez de décrire pour votre cas "writefile".
Assurez-vous donc d'utiliser les fonctions appropriées qui sont capables de traiter et de manipuler Wide Unicode et non ASCII/ANSI.