Aggiornamento MQL4 600 & Named Pipes - pagina 3

 

Ok, se il mio problema quando passo al modo W unicode è quello di collegare il tubo nel lato MT4, allora penso che la stringa \\\\.\\pipe\mypipe non è più una semplice stringa ma contiene i valori nulli come dice FMIC. Quindi è per questo che non posso connettermi nel mio lato vb.net perché quando uso la stessa stringa \\\\.\\pipe\mypipe non viene trovata e ricevo l'errore 2.

Provo a connettermi convertendo la stringa con StringToCharArray ma il tubo si connette con un errore.

Ha senso? Grazie

 
hmm, mi sbaglio, ovviamente...altrimenti se quando uso mt4 con la modalità A ansi anche il mio lato vb.net non si connette ma lo fa...
 

Uso questa linea di codice per mostrarmi tutti i tubi aperti.

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

e il mio tubo è lì. Quindi mt4 con modalità unicode "W" sta creando la pipe e aspetta le connessioni. Se posso creare nello stesso lato mt4 un client pipe posso testare...

 
Non so cosa fare...
 
bisewski:
Non so cosa fare...
Puoi postare un riassunto della tua situazione, perché non è molto chiaro, credo.
 

Ho aperto un post nel forum msdn perché penso che il problema sia nel mio lato 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

Posso creare le pipe con il mio codice mt4 ma non posso connettermi o chiamarle.

Quando uso la modalità ansi nel mio programma vb.net, posso collegare la pipe ma ricevo solo la prima lettera. Allora passo alla modalità unicode e so che non posso connettermi...ricevo l'errore 2.

Quindi penso che il mio ptoblem è ora con il mio codice vb.net e non il modo mio mql4.

Grazie per tutti gli aiutanti...

 

Se qualcuno ha ancora problemi nella gestione delle named pipe in MT4 v600, questo è il modo in cui ho risolto:

  • Cambiando CreateNamedPipeA e CreateFileA, con CreateNamedPipeW e CreateFileW
  • Cambiando le dichiarazioni in ReadFile e WriteFile (Buffer), in modo da poter lavorare con CharArrays (1 byte per carattere):
int WriteFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

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

  • Usare i Char array per comunicare tra il server e il client:

Server:

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

Cliente:

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

Grazie Oscarin per il tuo riassunto.

 
Grazie sr...
 
oscarin:

Se qualcuno ha ancora problemi nella gestione delle named pipe in MT4 v600, questo è il modo in cui ho risolto:

  • Cambiando CreateNamedPipeA e CreateFileA, con CreateNamedPipeW e CreateFileW
  • Cambiando le dichiarazioni in ReadFile e WriteFile (Buffer), in modo da poter lavorare con CharArrays (1 byte per carattere):

  • Usare i Char array per comunicare tra il server e il client:

Server:

Client:


In quale codice hai eseguito le modifiche indicate?

Qualcuno lo sa?

Sono ansioso di iniziare a lavorare con i named pips in MT4 600+ anche se non sono ancora riuscito a trovare una soluzione funzionante. Qualsiasi aiuto è molto apprezzato!