Hatalar, hatalar, sorular - sayfa 1313

 
Konstantin Karpov :
Derleme aşamasında terminalin bitliği nasıl belirlenir? TERMINAL_X64 tanımlayıcısı uygun değil çünkü fonksiyonlar içindir. Büyük olasılıkla, yardımda yazılmayan, ancak zaman zaman bazen bir biçimde veya başka bir şekilde ortaya çıkan makrolar vardır :)
Malesef gelmiyorlar. _IsX64 değişkeni var ama çalışma zamanında çalışıyor.
 

Biri 32-bit terminaller için, diğeri 64-bit terminaller için olmak üzere iki dll kullanılması durumunda nasıl çıkılır? Programın iki kopyasını saklamak koşer değildir...

Bu arada, kimin deneyimi var, eğer kod ME x64'te derlenirse, 32-bit terminallerde hatasız çalışacak mı yoksa kod yürütmenin bazı gizli özellikleri olacak mı?

 

Örneğin, 32-bit terminaller library_x86.dll ve 64-bit terminaller library_x64.dll için kütüphanede funcTest(...) işlevi vardır.

Dosyanın tamamında içe aktarma görünüyorsa, böyle bir yapı yazmak doğru mudur:

 void CClass::Test(...) {
  код метода...

   if ( TerminalInfoInteger ( TERMINAL_X64 )) {
       #import library_x64.dll
         library_x64::funcTest(...);
       #import
   } else {
       #import library_x86.dll
         library_x86::funcTest(...);
       #import
   }

   код метода...
}
Yoksa bu hile işe yaramaz mı?
 
Konstantin Karpov :
Yoksa bu hile işe yaramaz mı?

Bildiğim kadarıyla, hayır. Her iki dll'yi de içe aktarabilir ve terminalin bitliğine bağlı olarak birinin veya diğerinin işlevlerini çağırabilirsiniz .

Genel olarak, bit derinliğine göre iki versiyona bölmek o kadar da çılgın bir seçenek değildir.

 

Bir gösterge alıyorum (standart setlerden herhangi biri), danışmanı arayın:

 iCustom ( NULL , 0 , "Momentum" , 0 , 1 );

EA'yı test cihazında görselleştirme ile çalıştırdıktan sonra her şey çalışır, gösterge çizilir.

Şimdi göstergedeki bir satırı değiştiriyorum:

ExtMomBuffer[i]=close[i]* 100 /close[i-InpMomPeriod];

buna:

ExtMomBuffer[i]= 100 ;

Ve şimdi gösterge hiçbir şey çizmiyor - dikey ölçek bile gösterilmiyor.

Hata nerede? MetaTrader 4 yapı 765.

 
Ölçeğin görünmesi için pencere içinde iki farklı değere mi ihtiyacınız var? EMNIP. Bunun bir hata olarak kabul edilip edilemeyeceğinden emin değilim.
 

Tamam, alışılmamış davranış diyelim :)

Çok teşekkür ederim ama bir sorum daha var. Evet, bu şekilde çalıştı:

ExtMomBuffer[i]=i% 2 ;

Ve böylece tekrar durdu:

ExtMomBuffer[ 0 ]=i% 2 ;

MT'nin eski sürümlerinde benim için çalıştı, ancak yenilerinin nesi var?

 

Yani ikinci seçenekte bir değer.

Aslında yanılıyor olabilirim.

 

Peki, böyle yapabilirsiniz, ama yine de çalışmıyor:

ExtMomBuffer[ 0 ]=cnt++;

Sorunun özü, danışmanın her adımında göstergenin 0. çubuğuna yazma girişiminin hiçbir şey vermemesidir.

 

Görünüşe göre kazılacak yeri bulmuş. değişti

 ArraySetAsSeries (ExtMomBuffer, false );

doğru ve bir şeyler ortaya çıkmaya başladı. Gidip sarhoş olacağım.