Именованные Трубы для МТ4
Страница 1 из 815 123 ... ПоследняяПоследняя
Results 1 to 10 of 41

Thread: Именованные Трубы для МТ4

  1. #1
    Кто-то спрашивал, нужно ли использовать Named Pipes из MT4 для связи с другой программой, так что вот интерфейс и пример кода. Это решение без DLL, использующее только MQL4. Это предполагает, что вы уже знакомы с именованными каналами. Если нет, вы можете прочитать о них на
    http://msdn.microsoft.com/en-us/libr...80(VS.85).aspx

    Я действительно должен превратить это в библиотеку, но сейчас у меня нет времени. Если кто-то хочет это сделать, не стесняйтесь.

    Сначала интерфейс:
    Строка вставленного кода PipeNamePrefix = \\\\. \\ pipe \\; int BufferSize = 256; #define PIPE_ACCESS_INBOUND 1 #define PIPE_ACCESS_OUTBOUND 2 #define PIPE_ACCESS_DUPLEX 3 #define PIPE_TYPE_BYTE 0 #define PIPE_TYPE_MESSAGE 4 #define PIPE_READMODE_BYTE 0 #define PIPE_READMODE_MESSAGE 2 #define PIPE_WAIT 0 #define PIPE_NOWAIT 1 #define INVALID_HANDLE_VALUE 0xffffffff #define GenericRead 0x80000000 #define GenericWrite 0x40000000 #define OPEN_EXISTING 3 внешняя строка PipeName = MetaTrader; int PipeHandle = INVALID_HANDLE_VALUE; int Buffer # 91; 64 # 93 ;;/4 байтаint * 64 = 256 #import kernel32.dll int CreateNamedPipeA (строка pipeName, int openMode, int pipeMode, int maxInstances, int outBufferSize, int inBufferSize, int defaultTimeOut, int security); int WaitNamedPipeA (строка lpNamedPipeName, int nTimeOut); bool PeekNamedPipe (int pipeHandle, int buffer # 91; # 93 ;, int bufferSize, int bytesRead # 91; # 93 ;, int totalBytesAvail # 91; # 93 ;, int bytesLeftThisMessage # 91; # 93;); int CreateFileA (имя строки, int требуемый доступ, int SharedMode, защита int, создание int, флаги int, int templateFile); int WriteFile (int fileHandle, int buffer # 91; # 93 ;, int bytes, int numOfBytes # 91; # 93 ;, int перекрывается); int ReadFile (int fileHandle, int buffer # 91; # 93 ;, int bytes, int numOfBytes # 91; # 93 ;, int перекрывается); int CloseHandle (int fileHandle); int GetError (); #import Чтобы открыть канал как клиент, сделайте следующее:

    Вставленный код FullPipeName = PipeNamePrefix PipeName; if (PipeHandle == INVALID_HANDLE_VALUE) {if (WaitNamedPipeA (FullPipeName, 1) == 0) {//Печать (канал недоступен); вернуть; } PipeHandle = CreateFileA (FullPipeName, GenericRead | GenericWrite, 0, 0, OPEN_EXISTING, 0, 0); Печать (Symbol (),: PipeHandle =, PipeHandle); if (PipeHandle == INVALID_HANDLE_VALUE) {Печать (Ошибка открытия трубы); вернуть; }} Читать из трубы немного сложно. Вы не можете читать непосредственно в строки, поэтому я читаю в массив int, а затем преобразую массив в строку.
    ReadFile вставленного кода (PipeHandle, Buffer, BufferSize, bytesRead, 0); message = StringFromBuffer (bytesRead # 91; 0 # 93;); string StringFromBuffer (int length) {string message =; for (int i = 0; i lt; длина; i ) {int c = буфер # 91; i4 # 93 ;; int off = i% 4; int shift = 0; if (off == 1) shift = 8; иначе if (off == 2) shift = 16; иначе if (off == 3) shift = 24; c = (c gt; gt; shift) 0xff; сообщение = сообщение CharToStr (с); } return (сообщение); } И написать в трубу:
    Вставленный код CopyToBuffer (orderMessage); result = WriteFile (PipeHandle, Buffer, BufferSize, numOfBytes, 0); void CopyToBuffer (string message) {for (int i = 0; i lt; 64; i ) Buffer # 91; i # 93; = 0; for (i = 0; i lt; StringLen (сообщение); i ) {int off = i% 4; int shift = 0; if (off == 1) shift = 8; иначе if (off == 2) shift = 16; иначе if (off == 3) shift = 24; Буфер # 91; я4 # 93; | = StringGetChar (message, i) lt; lt; сдвиг; }}

  2. #2
    4X: Большое спасибо - я знаю, что на разработку и отладку такого рода вещей требуется время. Я вижу, что он будет использоваться между VB (иили VBA) и MT4 из-за ограниченного интерфейса DDE. Я также работаю над приложением Ninja Trader, которое может использовать IPC. Я обнаружил, что реализация старого стиля C в C # .NET может быть реальной проблемой! Еще раз спасибо, Кен. Вопросы: Buffer [i4] | = StringGetChar (message, i) lt; lt; сдвиг; Я не понимаю синтаксиса C достаточно, чтобы знать, что делают эти 2 оператора: | = ??? должен быть ORing (эксклюзив?) lt; lt; ???

  3. #3

    Quote Originally Posted by ;
    Вопросы: Buffer [i4] | = StringGetChar (message, i) lt; lt; сдвиг; Я не понимаю синтаксиса C достаточно, чтобы знать, что делают эти 2 оператора: | = ??? должен быть ORing (эксклюзив?) lt; lt; ???
    Да, это заняло совсем немного работы. x | = y совпадает с x = x | y и выполняет побитовое ИЛИ для x и y. x lt; lt; у сдвиги х влево на у битов. Итак, 1 lt; lt; 8 256. Вы можете прочитать больше о них обоих здесь:
    http://book.mql4.com/basics/expressions

  4. #4
    Привет 4X: Я действительно заставил это работать. Отправка данных из Excel в MT4. Мне потребовалось некоторое время, чтобы выяснить, что вы делали со всем этим дерьмом - теперь я вижу, что вы используете все 4 байта целого числа. Сначала я подумал, что это какой-то умный способ сохранить больше данных в 1 байт! знак равно

  5. #5
    Хорошо, надеюсь, это принесет вам немного пипсов. Да, код в основном упаковывает 4 символа (из 8 бит) в int (32 бита) для передачи на вызовы Read и Write. Причина в том, что я не мог заставить строки работать напрямую с вызовами, поэтому мне пришлось спуститься на уровень ниже.

  6. #6

    Quote Originally Posted by ;
    Привет 4X: Я действительно заставил это работать. Отправка данных из Excel в MT4. Мне потребовалось некоторое время, чтобы выяснить, что вы делали со всем этим дерьмом - теперь я вижу, что вы используете все 4 байта целого числа. Сначала я подумал, что это какой-то умный способ сохранить больше данных в 1 байт! знак равно
    Привет, Кенз, можешь поделиться своим исходным кодом или его частями? Я пытаюсь сделать то же самое, и все, что я получаю, это заблокированные приложения и сбои во всем .. Заранее спасибо ..

  7. #7
    еще один отличный кусок справочных кодов. Спасибо, что поделились 4xCoder. =) Моды, можем ли мы иметь это как липкий?

  8. #8

    Quote Originally Posted by ;
    Кто-то спрашивал, нужно ли использовать Named Pipes из MT4 для связи с другой программой, так что вот интерфейс и пример кода. Это решение без DLL, использующее только MQL4. Это предполагает, что вы уже знакомы с именованными каналами. Если нет, вы можете прочитать о них на
    http://msdn.microsoft.com/en-us/libr...80(VS.85).aspxЯ действительно должен превратить это в библиотеку, но сейчас у меня нет времени. Если кто-то хочет это сделать, не стесняйтесь. Сначала интерфейс: [код] строка ...
    Привет 4xCoder, Большое спасибо за обмен кодом. Я хочу использовать именованные каналы для экспорта одного целочисленного значения из Excel в MT4. На самом деле, у меня есть сложные вычисления, сделанные в Excel с использованием (O, H, L, C), которые я импортирую из MT4. Результатом этих сложных вызовов будет одна целочисленная переменная с одним из 3 значений ( 1, -1,0). Мне нужно прочитать это значение из Excel, используя индекс MT4, чтобы я мог подтвердить мои сделки. Не могли бы вы поделиться, как это сделать, пример Excel будет очень полезным. Я планирую использовать этот 1 мин TF. Заранее спасибо, ура, Way2Freedom

  9. #9
    Привет всем, Добрый день, Удачи в создании файла DLL для этого кода. Я до сих пор не знаю, что делать, чтобы его создать. У меня есть Delphi Xe, и я до сих пор не знаю, как получить код. Может ли кто-нибудь из великих программистов показать нам хотя бы шаги, как это сделать? С нетерпением ждем от вас, ребята, SF

  10. #10

    Quote Originally Posted by ;
    Любой успех в создании файла DLL для этого кода. Я до сих пор не знаю, что делать, чтобы его создать. У меня есть Delphi Xe, и я до сих пор не знаю, как получить код.
    В Delphi (и в FPC) все это красиво упаковано TPipeStream, и оно ведет себя точно так же, как любой другой поток, вам не нужно возиться с необработанным Windows API напрямую, если вы работаете с Delphi (или FPCLazarus).

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.