![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
SRC Отредактировано. Все еще есть проблемы с вызовом файла сервера после обновления до 'W'. Есть предложения?
У меня та же проблема...
Я думаю, что моя проблема в строке writefile... Я отправляю только одну букву. Если я хочу отправить слово UPDATE, то отправляется только буква U...
Я отправил свой код господину angevoyageur. Он модератор, если я правильно понял. Если он мне поможет, я отправлю вам...
У меня та же проблема...
Я думаю, что моя проблема в строке writefile... Я отправляю только одну букву. Если я хочу отправить слово UPDATE, то отправляется только буква U...
Я отправил свой код господину angevoyageur. Он модератор, если я правильно понял. Если он мне поможет, я отправлю вам...
Я не знаю, имеет ли это значение для решения ваших проблем или нет, но помните, что в новой сборке MT4 строки являются 16-битными символами Wide Unicode, а не обычными 8-битными ASCII/ANSII Characters.
Символы ASCII в Wide Unicode разделяются байтами ZERO, и поскольку многие функции, работающие с ASCII/ANSI, заканчивают строку байтом ZERO (ASCIIZ), они обычно обрабатывают только ОДИН символ. Поведение, которое вы только что описали для вашего случая "writefile".
Поэтому убедитесь, что вы используете соответствующие функции, способные обрабатывать и манипулировать Wide Unicode, а не ASCII/ANSI.
Спасибо, сэр FMIC, я думаю, что вы правы.
Я тестирую и опубликую результаты.
На стороне приложения, в vb.net у меня есть такой код:
Эта строка вызывает namedpipe в mt4 и mt4 посылает сообщение для него.
Я пытаюсь изменить на CallNamedPipeW, но ничего не происходит.
Тогда я вернулся в режим ansi и прочитал результат cbRead. Если у меня есть текст в mt4 для отправки "123456", cbRead = 7. Я помещаю любой текст, если длина = 100, я получаю 101. Но считывается только первый шаректер, как в UPDATE, где я получаю U и cbRead = 7.
Чтобы получить значение в cbRead, я использую это.
textInArray.length всегда = 257. Если моя строка UPDATE равна 257 и если моя строка UP равна 257.
EDIT:
Я знаю, почему 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)
Если я использую CallNamedPipeW, я получаю ошибку номер 2 ERROR_FILE_NOT_FOUND.
Есть успехи, друзья. Я тоже застрял с проблемой связи NamedPips на новом MT4 build 600. Я тестировал замену 'A' на 'W', но не работает.
Я не знаю, имеет ли это значение для решения ваших проблем или нет, но помните, что в новой сборке MT4 строки являются 16-битными символами Wide Unicode, а не обычными 8-битными символами ASCII/ANSII.
Символы ASCII в Wide Unicode разделяются байтами ZERO, и поскольку многие функции, работающие с ASCII/ANSI, завершают строку байтом ZERO (ASCIIZ), они обычно обрабатывают только ОДИН символ. Поведение, которое вы только что описали для случая "writefile".
Поэтому убедитесь, что вы используете соответствующие функции, способные обрабатывать и манипулировать Wide Unicode, а не ASCII/ANSI.