기고글 토론 "DLLs을 사용하지 않고 명명된 파이프를 사용하여 MetaTrader 5와 통신하기" - 페이지 4 1234567 새 코멘트 Dmitriy Parfenovich 2012.11.25 14:36 #31 Renat: 문자열을 전송할 때 4바이트의 크기가 먼저 전송됩니다.명시적인 버퍼 크기를 지정하여 데이터를 수신하는 기능을 수정했습니다.역방향 전송이 작동하지 않는 이유를 이해했습니다 - 전송된 데이터의 길이를 지정하지 않았습니다.정말 감사합니다. 모든 것이 작동했습니다.파이프는 강력합니다. 기사 작성자에게 존경을 표합니다. Rustamzhan Salidzhanov 2012.11.25 17:47 #32 Renat: 이 작업은 메타트레이더 4의 마지막 빌드에서 수행되었습니다. 사과드립니다, 제가 뭔가 놓친 것 같아서요. 공지사항 445를 봤는데 실제로 핍에 대한 내용이 있습니다. 문제는 도움말에 이에 대한 단어가 없다는 것입니다. 이 주제에 대한 업데이트가 언제 있을까요? 포럼에서 설명해 주실 수 있을까요? Renat Fatkhullin 2012.11.25 19:30 #33 4의 파이프는 파일 작업을 통해서도 5와 유사하게 작동합니다.MT4용 문서도 곧 공개할 예정입니다. Maksim Narumov 2013.01.22 15:41 #34 Renat:4의 파이프는 파일 작업을 통해서도 5와 유사하게 작동합니다.곧 MT4용 문서를 공개할 예정입니다.안녕하세요, MT4에 대한 간단한 예제가 있을까요? 물론 기사에는 의존하지 않습니다.특히 제가 직접 작성한 프로그램에서 세 가지 매개 변수를 터미널의 Expert Advisor로 읽는 방법에 관심이 있습니다. Dmitriy Skub 2013.01.31 10:28 #35 Renat: 메타트레이더 4의 마지막 빌드에서 만들어졌습니다.MT5에서는 모든 것이 정상적으로 작동하는 것 같습니다.유일한 요점은:ReadString 및 기타 메서드를 사용하여 채널에서 읽으려고 할 때 파이프 채널의 무결성이 먼저 확인되도록 만드는 것이 좋습니다. 그렇지 않으면 서버 측이 오랫동안 닫혔음에도 불구하고 WaitForRead 메서드가 무기한 중단됩니다. 이 모든 것은 Win7-64에서 확인되었습니다. 서버 측의 WaitForRead 메서드에 시간 초과 및 기타 트릭을 추가하고 채널 양쪽에서 자동으로 다시 연결되는 작동하는 시스템을 얻었습니다, 그러나 그것은 모두 약간 "버팀목"입니다. Renat Fatkhullin 2013.01.31 10:39 #36 Dima_S:MT5에서는 모든 것이 정상적으로 작동하는 것 같습니다.유일한 요점은:ReadString 및 기타 메서드를 사용하여 채널에서 읽으려고 할 때 파이프 채널의 무결성이 먼저 확인되도록 만드는 것이 좋습니다. 그렇지 않으면 서버 측이 오랫동안 닫혔음에도 불구하고 WaitForRead 메서드가 무기한 중단됩니다. 이 모든 것은 Win7-64에서 확인되었습니다. 서버 측의 WaitForRead 메서드에 시간 초과 및 기타 트릭을 추가하고 채널 양쪽에서 자동으로 다시 연결되는 작동하는 시스템을 얻었습니다, 하지만 모두 약간 "버팀목"입니다.저희 입장에서는 가능성을 보여주는 데모였습니다. 여러분의 변형된 수업을 게시해 주세요. 표준 클래스를 확정하겠습니다. Dmitriy Skub 2013.01.31 13:07 #37 실제로는 오류를 검사하고 타임아웃(대기 시간 - 기존 단위 - 약 20msec 간격)으로 종료하는 WaitForRead 메서드만 추가했습니다:bool CFilePipe::WaitForRead( const ulong size, const int _time_out ) { int count = 0; while( count < _time_out && m_handle != INVALID_HANDLE && !IsStopped( )) { if( FileSize( m_handle ) >= size ) { return( true ); } else if( GetLastError( ) != 0 ) { return( false ); } Sleep( 1 ); count++; } return( false ); }클라이언트 부분 자체는 대략 이렇게 생겼습니다:while( !IsStopped( )) { // 서버 파이프에 연결하려고 합니다: Print( "Try to connect" ); if( pipe_Ptr.Open( ch_name, FILE_READ | FILE_WRITE | FILE_ANSI ) != INVALID_HANDLE ) { if( IsStopped( )) { pipe_Ptr.Close( ); return; } Print( "Pipe " + ch_name + " opened" ); // 데이터 수신 주기: while( !IsStopped( )) { // 연결의 무결성을 확인합니다: if( !pipe_Ptr.WriteString( "@" )) { Print( "Disconnected: ", GetLastError( )); pipe_Ptr.Close( ); break; } // 데이터 검색 중입니다: if( pipe_Ptr.WaitForRead( sizeof( int ), 100 )) { if( !pipe_Ptr.ReadString( str )) { Print( "Reading string failed: ", GetLastError( )); pipe_Ptr.Close( ); break; } Print( "Server: ", str, " received" ); } } } Sleep( 1000 ); }요점은 데이터가 도착할 때까지 기다리는 동안 사용되는 FileSize 메서드가 연결 위반을 감지하지 못한다는 것입니다 (분명히 확인하지 않는 것 같습니다).시간 초과가 도움이 되지만 모든 가능한 상황에 적용되지는 않습니다. FileSize 메서드에서 이러한 모든 오류를 확인하는 것이 좋을 것입니다. Alexey Klenov 2013.03.26 12:34 #38 이상한...버퍼의 그림이 댓글에 들어가지 않고 정확히 alt+PrntScr을 사용하여 편집기에 붙여 넣으면 그림은 삽입되지만 메시지는 가지에 들어가지 않습니다.문제는 문서의 테스트 예제가 통과하지 못한다는 것입니다. 하지만 터미널에서는 차트에서 삭제할 때까지 스크립트가 아무것도 기록하지 않습니다. 그리고 로그에서 다음을 볼 수 있습니다. 2013.03.26 15:33:11 PipeClient (EURUSD,M5) Client: sending welcome message failed 2013.03.26 15:33:11 PipeClient (EURUSD,M5) Client: pipe opened 2013년 3월 21일 날짜의 Win7x64 빌드 787 Renat Fatkhullin 2013.03.26 13:45 #39 방금 확인했더니 모든 것이 작동합니다.MQ5에서는 라인만 교체하면 됩니다.uint items=ExtPipe.ReadDoubleArray(buffer); на uint items=ExtPipe.ReadArray(buffer); Alexey Klenov 2013.03.26 13:55 #40 Renat:방금 확인했더니 모든 것이 작동합니다.MQ5에서는 라인만 교체하면 됩니다.나는 가지고 있지 않다 ...줄을 바꾸지 않으면 컴파일되지 않습니다. 1234567 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
문자열을 전송할 때 4바이트의 크기가 먼저 전송됩니다.
명시적인 버퍼 크기를 지정하여 데이터를 수신하는 기능을 수정했습니다.
역방향 전송이 작동하지 않는 이유를 이해했습니다 - 전송된 데이터의 길이를 지정하지 않았습니다.
정말 감사합니다. 모든 것이 작동했습니다.
파이프는 강력합니다. 기사 작성자에게 존경을 표합니다.
이 작업은 메타트레이더 4의 마지막 빌드에서 수행되었습니다.
4의 파이프는 파일 작업을 통해서도 5와 유사하게 작동합니다.
MT4용 문서도 곧 공개할 예정입니다.
4의 파이프는 파일 작업을 통해서도 5와 유사하게 작동합니다.
곧 MT4용 문서를 공개할 예정입니다.
안녕하세요, MT4에 대한 간단한 예제가 있을까요? 물론 기사에는 의존하지 않습니다.
특히 제가 직접 작성한 프로그램에서 세 가지 매개 변수를 터미널의 Expert Advisor로 읽는 방법에 관심이 있습니다.
메타트레이더 4의 마지막 빌드에서 만들어졌습니다.
MT5에서는 모든 것이 정상적으로 작동하는 것 같습니다.
유일한 요점은:
그렇지 않으면 서버 측이 오랫동안 닫혔음에도 불구하고 WaitForRead 메서드가 무기한 중단됩니다. 이 모든 것은 Win7-64에서 확인되었습니다.
서버 측의 WaitForRead 메서드에 시간 초과 및 기타 트릭을 추가하고 채널 양쪽에서 자동으로 다시 연결되는 작동하는 시스템을 얻었습니다,
그러나 그것은 모두 약간 "버팀목"입니다.
MT5에서는 모든 것이 정상적으로 작동하는 것 같습니다.
유일한 요점은:
그렇지 않으면 서버 측이 오랫동안 닫혔음에도 불구하고 WaitForRead 메서드가 무기한 중단됩니다. 이 모든 것은 Win7-64에서 확인되었습니다.
서버 측의 WaitForRead 메서드에 시간 초과 및 기타 트릭을 추가하고 채널 양쪽에서 자동으로 다시 연결되는 작동하는 시스템을 얻었습니다,
하지만 모두 약간 "버팀목"입니다.
저희 입장에서는 가능성을 보여주는 데모였습니다.
여러분의 변형된 수업을 게시해 주세요. 표준 클래스를 확정하겠습니다.
클라이언트 부분 자체는 대략 이렇게 생겼습니다:
요점은 데이터가 도착할 때까지 기다리는 동안 사용되는 FileSize 메서드가 연결 위반을 감지하지 못한다는 것입니다 (분명히 확인하지 않는 것 같습니다).
시간 초과가 도움이 되지만 모든 가능한 상황에 적용되지는 않습니다. FileSize 메서드에서 이러한 모든 오류를 확인하는 것이 좋을 것입니다.
이상한...
버퍼의 그림이 댓글에 들어가지 않고 정확히 alt+PrntScr을 사용하여 편집기에 붙여 넣으면 그림은 삽입되지만 메시지는 가지에 들어가지 않습니다.
문제는 문서의 테스트 예제가 통과하지 못한다는 것입니다.
하지만 터미널에서는 차트에서 삭제할 때까지 스크립트가 아무것도 기록하지 않습니다.
그리고 로그에서 다음을 볼 수 있습니다.
2013년 3월 21일 날짜의 Win7x64 빌드 787
방금 확인했더니 모든 것이 작동합니다.
MQ5에서는 라인만 교체하면 됩니다.
방금 확인했더니 모든 것이 작동합니다.
MQ5에서는 라인만 교체하면 됩니다.
나는 가지고 있지 않다 ...
줄을 바꾸지 않으면 컴파일되지 않습니다.