Bu kod, artık sunucumdaki hesapları doğrulamadığı MT4 build 600'de test edene kadar benim için kusursuz çalıştı.
Öneriniz için teşekkürler, ama tüm ansi 'A'yı W'ye çevirmeye çalıştım ama yine de zar yok.
Sorununuz InternetReadFile() ile olacak. Yeni MQL4'te WinInet işlevlerinin nasıl kullanılacağına ilişkin bir örnek için https://www.mql5.com/en/code/1998 adresindeki EasyXml.mqh adresine bakın - kod hem MQL4 hem de MQL5'te çalışır.
Özünde, bir uchar[] dizisini InternetReadFile() öğesine iletirsiniz ve ardından diziyi CharArrayToString() kullanarak bir dizeye dönüştürürsünüz. Şimdi MQL4'te yapabileceğiniz şey, yönetilen bellek arabelleklerini keyfi uzunlukta tahsis etmek, bunları bir DLL'ye geçirmek ve ardından verileri uygun şekilde Ansi veya Unicode'dan dönüştürmektir.
Özünde, bir uchar[] dizisini InternetReadFile() öğesine iletirsiniz ve ardından diziyi CharArrayToString() kullanarak bir dizeye dönüştürürsünüz. Şimdi MQL4'te yapabileceğiniz şey, yönetilen bellek arabelleklerini keyfi uzunlukta tahsis etmek, bunları bir DLL'ye geçirmek ve ardından verileri uygun şekilde Ansi veya Unicode'dan dönüştürmektir.
Konuyu genişleterek ve biraz cevap vererek... yeni MQL4'te birçok işlevin A veya W sürümlerini çağırmak mümkündür. Örneğin, aşağıdaki komut dosyası hem GetTempPathA hem de GetTempPathW çağrılarını kullanarak Windows geçici dizinini alır:
#import "kernel32.dll" int GetTempPathA( int , uchar & arr[]); int GetTempPathW( int , short & arr[]); #import void OnStart () { uchar AnsiStringBuffer[ 256 ]; GetTempPathA( 255 , AnsiStringBuffer); string strTempPathFromA = CharArrayToString (AnsiStringBuffer); short UnicodeStringBuffer[ 256 ]; GetTempPathW( 255 , UnicodeStringBuffer); string strTempPathFromW = ShortArrayToString (UnicodeStringBuffer); Print ( "Temp path via GetTempPathA(): " , strTempPathFromA); Print ( "Temp path via GetTempPathW(): " , strTempPathFromW); }
Bu nedenle, yeni MQL4'ten birçok yalnızca Ansi DLL çağrısını kullanmaya devam etmek mümkündür: MQL4 kodunu ve DLL'yi güncellemeniz gerekmez.
Bu nedenle, yeni MQL4'ten birçok yalnızca Ansi DLL çağrısını kullanmaya devam etmek mümkündür: MQL4 kodunu ve DLL'yi güncellemeniz gerekmez.
... Başka bir örnek: dize değerlerini yeni MQL4'ten bir Ansi DLL çağrısına geçirmek. (Gerçek hayatta, MessageBoxA'yı aramak için bu geçici çözümü kullanmak yerine açıkça MessageBoxW'yi çağırırsınız, ancak genel nokta yararlıdır)
#import "user32.dll" // Declare the Ansi function as taking uchar[] input parameters instead of strings int MessageBoxA( int , uchar & arr1[], uchar & arr2[], int ); #import void OnStart () { string strMessage = "Hello" ; string strTitle = "Hi!" ; // Convert the strings to uchar[] arrays uchar ucMessage[], ucTitle[]; StringToCharArray (strMessage, ucMessage); StringToCharArray (strTitle, ucTitle); MessageBoxA( 0 , ucMessage, ucTitle, 64 ); }
Birkaç saattir bununla uğraşıyorum, hala şans yok. Yani evet, bunu benim için yapacak birini işe almak istiyorum;)
Birkaç saattir bununla uğraşıyorum, hala şans yok. Yani evet, bunu benim için yapacak birini arıyorum ;)
Bakın https://www.mql5.com/en/forum/149360 - Bunu buraya cevap olarak göndermek üzereydim ama sonra bir sorun buldum ...
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Bu kod, artık sunucumdaki hesapları doğrulamadığı MT4 build 600'de test edene kadar benim için kusursuz çalıştı.