Обновление MQL4 600 и именных труб - страница 3

 

Хорошо, если моя проблема, когда я перехожу в режим W unicode, заключается в подключении трубы в стороне MT4, поэтому я думаю, что строка \\\\.\\\pipe\\mypipe больше не является простой строкой, а содержит нулевые значения, как сказал de FMIC. Вот почему я не могу подключиться в моей стороне vb.net, потому что когда я использую ту же строку \\\\.\\\pipe\\\mypipe не найдена и я получаю ошибку 2.

Я пытаюсь подключить преобразовать строку с помощью StringToCharArray, но при подключении трубы получаю ошибку.

Есть ли смысл? Спасибо

 
Хмм, я ошибаюсь, конечно...еще если я использую в mt4 сторону с режимом A ansi, моя сторона vb.net также не будет подключаться, но она подключается...
 

Я использую этот код, чтобы показать мне все открытые трубы.

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

и моя труба там. Значит, mt4 с режимом юникода "W" создает трубу и ждет соединения. Если я смогу создать на той же стороне mt4 клиент трубы, я смогу проверить...

 
Я не знаю, что делать...
 
bisewski:
Я не знаю, что делать...
Можете ли вы опубликовать краткое описание вашей ситуации, поскольку она не очень понятна, как мне кажется.
 

Я открыл сообщение на форуме msdn, потому что мне кажется, что проблема в моей стороне 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

Я могу создать трубу с помощью моего кода mt4, но я не могу подключиться или вызвать их.

Когда я использую режим ansi в моей программе vb.net, я могу подключить трубу, но я получаю только первую букву. Тогда я перехожу в режим unicode и понимаю, что не могу подключиться... я получаю ошибку 2.

Так что я думаю, что моя проблема теперь с моим кодом vb.net, а не с режимом mql4.

Спасибо всем за помощь...

 

Если у кого-то все еще есть проблемы с управлением именованными трубами в MT4 v600, вот как я решил эту проблему:

  • Замена CreateNamedPipeA и CreateFileA на CreateNamedPipeW и CreateFileW.
  • Изменение деклараций в ReadFile и WriteFile (Buffer), так что я могу работать с CharArrays (1 байт на символ):
int WriteFile(int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

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

  • Использование массивов Char для обмена данными между сервером и клиентом:

Сервер:

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

Клиент:

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

Спасибо, Оскарин, за ваше резюме.

 
Спасибо...
 
oscarin:

Если у кого-то все еще есть проблемы с управлением именованными трубами в MT4 v600, вот как я решил эту проблему:

  • Замена CreateNamedPipeA и CreateFileA на CreateNamedPipeW и CreateFileW.
  • Изменение деклараций в ReadFile и WriteFile (Buffer), так что я могу работать с CharArrays (1 байт на символ):

  • Использование массивов Char для обмена данными между сервером и клиентом:

Сервер:

Клиент:


В каком коде Вы произвели указанные изменения?

Кто-нибудь знает это?

Я очень хочу начать работать с именованными пипсами в MT4 600+, но пока не смог найти рабочего решения. Любая помощь будет очень признательна!

Причина обращения: