Errori, bug, domande - pagina 1313

 
Konstantin Karpov:
Come posso determinare a tempo di compilazione quale modalità di bit è il terminale? L'identificatore TERMINAL_X64 non si adatta in quanto è progettato per le funzioni. Molto probabilmente, ci sono macro che non sono menzionate nell'aiuto, ma saltano fuori occasionalmente in un modo o nell'altro :)
Ahimè, non lo fanno. C'è una variabile _IsX64 ma funziona a runtime.
 

Come posso evitare di usare due dll, una per i terminali a 32 bit e una per quelli a 64 bit? Non è kasher tenere due istanze del programma...

A proposito, chi ha esperienza, se si compila il codice in ME x64, funzionerà su terminali a 32 bit senza errori o ci saranno alcune caratteristiche nascoste di esecuzione del codice?

 

Per esempio, c'è la funzione funcTest(...) nella libreria per terminali a 32 bit library_x86.dll e per terminali a 64 bit library_x64.dll.

Se l'importazione è visibile in tutto il file, è corretto scrivere un tale costrutto:

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

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

   код метода...
}
o questo trucco non funziona?
 
Konstantin Karpov:
O questo trucco non funziona?

Per quanto ne so, no. Potete importare entrambe le DLL e chiamare le funzioni di una o dell'altra a seconda del bit rate del terminale.

In generale, dividere in due versioni per bit rate non è un'opzione così delirante.

 

Prendo un indicatore (qualsiasi del set standard), lo chiamo nell'Expert Advisor:

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

Dopo aver eseguito l'EA con la visualizzazione nel tester - tutto funziona, l'indicatore è disegnato.

Ora cambio una linea nell'indicatore:

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

a questa linea:

ExtMomBuffer[i]=100;

E ora l'indicatore non disegna proprio nulla - anche una scala verticale non è segnata.

Dov'è l'errore? MetaTrader 4 build 765.

 
Avete bisogno di due valori diversi all'interno della finestra per far apparire la scala? EMNIP. Non sono sicuro che questo possa essere considerato un bug.
 

OK, chiamiamolo comportamento non convenzionale :)

Grazie mille, ma ho un'altra domanda. Sì, funzionava così:

ExtMomBuffer[i]=i%2;

Ed è così che ha smesso di funzionare di nuovo:

ExtMomBuffer[0]=i%2;

Funzionava nelle vecchie versioni di MT, cosa c'è di sbagliato nelle nuove?

 

Quindi nella seconda versione c'è un solo valore.

In realtà, potrei sbagliarmi.

 

Beh, si può fare così, ma non funziona lo stesso:

ExtMomBuffer[0]=cnt++;

Il nocciolo del problema è che provare a scrivere sulla barra 0 dell'indicatore ad ogni passo dell'EA - non fa nulla.

 

Credo di aver trovato dove scavare. Cambiato

ArraySetAsSeries(ExtMomBuffer,false);

al vero e qualcosa comincia a vedersi. Vado a ubriacarmi.