MQL4 600 ve Adlandırılmış Boruları Güncelleyin - sayfa 3

 

Tamam, W unicode moduna geçtiğimde sorunum boruyu MT4 tarafına bağlamaksa, bu nedenle \\\\.\\pipe\\mypipe dizesinin artık basit bir dize olmadığını, ancak de gibi boş değerleri içerdiğini düşünüyorum. FMIC dedi. Bu yüzden vb.net tarafımda bağlanamıyorum çünkü aynı dizeyi kullandığımda \\\\.\\pipe\\mypipe bulunamadı ve 2 hatası alıyorum.

Dizeyi StringToCharArray ile dönüştürmeye çalışıyorum ancak boru bağlantısında hata oluştu.

Mantıklı olmak? teşekkürler

 
hmm, yanılıyorum, tabii ki... yoksa mt4 tarafını A ansi modu ile kullandığımda vb.net tarafım da bağlanmıyor ama oluyor...
 

Bana açılan tüm boruları göstermek için bu satır kodunu kullanıyorum.

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

ve pipom orada. Yani mt4 unicode modu ile "W" boru oluşturuyor ve bağlantıları bekliyor. Aynı mt4 tarafında bir boru istemcisi oluşturabilirsem, test edebilirim ...

 
ne yapacağımı bilmiyorum...
 
bisewski :
ne yapacağımı bilmiyorum...
Durumunuzun bir özetini gönderebilir misiniz, sanırım çok net değil.
 

Sorunun vb.net tarafımda olduğunu düşündüğüm için msdn forumunda bir gönderi açıyorum.

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

Boruyu mt4 kodumla oluşturabilirim ama onları bağlayabilir veya arayabilirim.

vb.net programımda ansi modunu kullandığımda boruyu bağlayabiliyorum ama sadece ilk harfi alıyorum. Bu yüzden unicode moduna geçiyorum ve bağlanamadığımı biliyorum... 2 hatası alıyorum.

Bu yüzden, ptoblemimin şimdi vb.net kodumla olduğunu ve mql4'ümü modlamadığını düşünüyorum.

Tüm yardımcılar için teşekkürler...

 

Birisi MT4 v600'de adlandırılmış yönlendirmeleri yönetme konusunda hala sorun yaşıyorsa, sorunu şu şekilde çözdüm:

  • CreateNamedPipeW ve CreateFileW ile CreateNamedPipeA ve CreateFileA'yı değiştirme
  • ReadFile ve WriteFile (Buffer) içindeki bildirimleri değiştirerek CharArrays (karakter başına 1 bayt) ile çalışabilirim:
 int WriteFile( int FileHandle, uchar & Buffer[], int BufferLength, int & BytesWritten[], int PassAsZero);

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

  • Sunucu ve istemci arasında iletişim kurmak için Char dizilerini kullanma:

sunucu:

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

Müşteri:

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

Özetin için teşekkürler Oscarin.

 
teşekkürler sr...
[Silindi]  
oscarin :

Birisi MT4 v600'de adlandırılmış yönlendirmeleri yönetme konusunda hala sorun yaşıyorsa, sorunu şu şekilde çözdüm:

  • CreateNamedPipeW ve CreateFileW ile CreateNamedPipeA ve CreateFileA'yı değiştirme
  • ReadFile ve WriteFile (Buffer) içindeki bildirimleri değiştirerek CharArrays (karakter başına 1 bayt) ile çalışabilirim:

  • Sunucu ve istemci arasında iletişim kurmak için Char dizilerini kullanma:

sunucu:

Müşteri:


Belirtilen değişiklikleri hangi kodda yaptınız?

Bunu bilen var mı?

Henüz çalışan bir çözüm bulamamış olmama rağmen, MT4 600+'da adlandırılmış piplerle çalışmaya başlamak için sabırsızlanıyorum. Herhangi bir yardım çok takdir edildi!