MQL4 600 및 명명된 파이프 업데이트 - 페이지 3

 

좋아, 모드 W 유니코드로 변경할 때 내 문제가 MT4 측의 파이프를 연결하는 것이므로 \\\\.\\pipe\\mypipe 문자열은 더 이상 단순한 문자열이 아니라 de와 같은 null 값을 포함합니다. FMIC는 말했다. 동일한 문자열을 사용할 때 \\\\.\\pipe\\mypipe를 찾을 수 없고 오류 2가 표시되기 때문에 vb.net 측에서 연결할 수 없습니다.

StringToCharArray로 변환 문자열을 연결하려고 시도하지만 파이프 연결에 오류가 발생했습니다.

말이 됩니까? 감사해요

 
흠, 틀렸습니다. 물론 ... Asi 모드로 mt4 쪽에서 사용할 때 vb.net 쪽도 연결되지 않지만 연결됩니다...
 

이 라인 코드를 사용하여 열린 모든 파이프를 보여줍니다.

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

그리고 내 파이프가 거기에 있습니다. 따라서 유니코드 모드 "W"를 사용하는 mt4는 파이프를 생성하고 연결을 기다리고 있습니다. 동일한 mt4 측에서 파이프 클라이언트를 생성할 수 있다면 테스트할 수 있습니다.

 
어떻게 해야할지 모르겠어...
 
bisewski :
어떻게 해야할지 모르겠어...
귀하의 상황에 대한 요약을 게시할 수 있습니까? 제 생각에는 명확하지 않습니다.
 

문제가 내 vb.net 측에 있다고 생각하기 때문에 msdn 포럼에서 게시물을 엽니다.

http://social.msdn.microsoft.com/Forums/en-US/409d4a2d-0a88-4094-9f0c-403798a2ce3d/pipe-unicode-mode-not-connecting-like-ansi-mode?forum=vbgeneral

내 mt4 코드로 파이프를 생성할 수 있지만 연결하거나 호출할 수 있습니다.

vb.net 프로그램에서 si 모드를 사용하면 파이프를 연결할 수 있지만 첫 번째 문자만 수신됩니다. 그래서 유니코드 모드로 변경했는데 연결할 수 없다는 것을 알고 있습니다...오류 2가 나타납니다.

그래서 나는 내 ptoblem이 이제 내 vb.net 코드와 함께 있고 내 mql4를 모드화하지 않는다고 생각합니다.

모든 도우미에게 감사합니다 ...

 

누군가 MT4 v600에서 명명된 파이프 를 관리하는 데 여전히 문제가 있는 경우 다음과 같이 해결했습니다.

  • CreateNamedPipeW 및 CreateFileW를 사용하여 CreateNamedPipeA 및 CreateFileA 변경
  • ReadFile 및 WriteFile(버퍼)의 선언을 변경하여 CharArray(문자당 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에게 감사드립니다.

 
감사합니다 선생님...
 
oscarin :

누군가 MT4 v600에서 명명된 파이프를 관리하는 데 여전히 문제가 있는 경우 다음과 같이 해결했습니다.

  • CreateNamedPipeW 및 CreateFileW를 사용하여 CreateNamedPipeA 및 CreateFileA 변경
  • ReadFile 및 WriteFile(버퍼)의 선언을 변경하여 CharArray(문자당 1바이트)로 작업할 수 있습니다.

  • Char 배열을 사용하여 서버와 클라이언트 간 통신:

섬기는 사람:

고객:


어떤 코드에서 표시된 변경을 수행했습니까?

아무도 이것을 알고 있습니까?

아직 작동하는 솔루션을 찾을 수 없었지만 MT4 600+에서 명명된 핍으로 작업을 시작하고 싶습니다. 도움을 주시면 감사하겠습니다!