Mise à jour du MQL4 600 et des tuyaux nommés - page 3

 

Ok, si mon problème lorsque je passe en mode W unicode est de connecter le pipe dans le côté MT4, alors je pense que la chaîne \\\\.\pipe\\mypipe n'est plus une simple chaîne mais contient les valeurs nulles comme de FMIC dit. C'est pourquoi je ne peux pas me connecter dans mon côté vb.net parce que lorsque j'utilise la même chaîne \\\\.\pipe\mypipe n'est pas trouvé et je reçois l'erreur 2.

J'essaie de me connecter en convertissant la chaîne avec le StringToCharArray mais le pipe connect a obtenu l'erreur.

Est-ce que cela a un sens ? Merci

 
hmm, je me trompe, bien sûr...sinon, si j'utilise le côté mt4 avec le mode A ansi, mon côté vb.net ne se connectera pas non plus, mais il le fait....
 

J'utilise cette ligne de code pour me montrer tous les tuyaux ouverts.

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

et mon tuyau est là. Donc les mt4 avec le mode unicode "W" créent le pipe et attendent les connexions. Si je peux créer dans le même côté mt4 un client pipe je peux tester...

 
Je ne sais pas quoi faire...
 
bisewski:
Je ne sais pas quoi faire...
Pouvez-vous poster un résumé de votre situation, car ce n'est pas très clair je pense.
 

J'ai ouvert un post dans le forum msdn parce que je pense que le problème se trouve du côté de mon 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

Je peux créer les tuyaux avec mon code mt4 mais je ne peux pas les connecter ou les appeler.

Quand j'utilise le mode ansi dans mon programme vb.net, je peux connecter le pipe mais je ne reçois que la première lettre. Je passe donc en mode unicode et je sais que je ne peux pas me connecter... Je reçois l'erreur 2.

Donc je pense que mon problème est maintenant avec mon code vb.net et non avec le mode mql4.

Merci de votre aide...

 

Si quelqu'un a encore des problèmes pour gérer les tuyaux nommés dans MT4 v600, voici la façon dont je l'ai résolu :

  • Remplacer CreateNamedPipeA et CreateFileA par CreateNamedPipeW et CreateFileW.
  • Changer les déclarations dans ReadFile et WriteFile (Buffer), afin que je puisse travailler avec des CharArrays (1 octet par caractère) :
int WriteFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

int ReadFile(int FileHandle, uchar & BufferPtr[], int BufferLength, int & BytesRead[], int PassAsZero);

  • Utilisation des CharArrays pour communiquer entre le serveur et le client :

Serveur :

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];
} 

Client :

uchar Mess_char[];
StringToCharArray(Message, Mess_char,0);
WriteFile(PipeHandle, Mess_char, StringLen(Message), BytesWritten, 0);
 

Merci Oscarin pour votre résumé.

 
Merci sr...
 
oscarin:

Si quelqu'un a encore des problèmes pour gérer les tuyaux nommés dans MT4 v600, voici la façon dont je l'ai résolu :

  • Remplacer CreateNamedPipeA et CreateFileA par CreateNamedPipeW et CreateFileW.
  • Changer les déclarations dans ReadFile et WriteFile (Buffer), afin que je puisse travailler avec des CharArrays (1 octet par caractère) :

  • Utilisation des CharArrays pour communiquer entre le serveur et le client :

Serveur :

Client :


Dans quel code avez-vous effectué les modifications indiquées ?

Est-ce que quelqu'un le sait ?

J'ai hâte de commencer à travailler avec des pips nommés dans MT4 600+, mais je n'ai pas encore pu trouver une solution fonctionnelle. Toute aide est la bienvenue !