[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 250

 
TarasBY:
Prima si calcola il profitto attuale su tutti gli ordini aperti, poi lo si confronta con il livello dichiarato: se è superiore, si eliminano tutti gli ordini. Questa procedura (e non solo) è fatta da questo EA (anche il codice è lì).

Grazie per il suggerimento
 

Non capisco.

gyfto:
//C++
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

Zhunko:
È ancora così:

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
  return(int(szStr));
 }

L'ho eseguito tre volte con questo codice:

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress(string str);
int GetStrAddress(string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   return(0);
  }
void strAddress (string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), ", старый вариант: ", IntegerToHexString(addrOld), ", новый вариант: ", IntegerToHexString(addrNew));
  }

Si riflette nel registro:

строка "", старый вариант: 656D6F73, новый вариант: 01CD8A90
строка "something", старый вариант: 6E696874, новый вариант: 01CD9010
строка "MyStr", старый вариант: 00360072, новый вариант: 01CD8AA0
строка "mystr", старый вариант: 00360072, новый вариант: 01CD8AA8

строка "", старый вариант: 656D6F73, новый вариант: 01C97858
строка "something", старый вариант: 6E696874, новый вариант: 01CDCC30
строка "MyStr", старый вариант: 00360072, новый вариант: 01C978868
строка "mystr", старый вариант: 00360072, новый вариант: 01C997870

строка "", старый вариант: 656D6F73, новый вариант: 01D93108
строка "something", старый вариант: 6E696874, новый вариант: 01CC5A58
строка "MyStr", старый вариант: 00360072, новый вариант: 01D93118
строка "mystr", старый вариант: 00360072, новый вариант: 01D93120

Nel primo caso abbiamo un puntatore al primo elemento del campo della struttura MqlStr.string, nel secondo caso abbiamo un puntatore al primo elemento della stringa (LPCSTR ancora lo stessoconst char*). Vediamo indirizzi diversi. P-perché? Risulta che la stringa come un array char e la stringa come struttura interna della sua rappresentazione in MQL4 hanno indirizzi diversi? O significa che la "struttura della stringa" descritta in ExpertSample come formato interno è artificiale, e il suo formato interno in MQL4 è lpsz? O forse ho sbagliato il primo codice?

 
Salve a tutti, potete consigliarmi, dopo le compilazioni sull'icona dell'EA appare un lucchetto e posso vederlo solo nella finestra di download attraverso il programma e nella cartella è invisibile, come risolvere il problema? Puoi ripararlo?
 
In alcuni esempi, vedo return(-1), return(0) o semplicemente return. Uso return(0) per interrompere il programma da questa posizione. Potete dirmi cosa fanno return(-1) e return?
 
gyfto:
O significa che la "struttura delle stringhe", descritta in ExpertSample come formato interno, è artificiale, e infatti il suo formato interno in MQL4 è lpsz?

Questo significa che nella DLL la stringa è trasferita esattamente come char* e non come MqlStr. Ma non significa che nel programma ex4 la stringa non è memorizzata come MqlString. In generale, il trasferimento di parametri da ex4 a dll è (secondo gli sviluppatori) un processo piuttosto complesso, accompagnato da tutti i tipi di controlli e trasformazioni di parametri.
 
laveosa:
Salve a tutti, potete consigliarmi, dopo le compilazioni sull'icona dell'EA appare un lucchetto e posso vederlo solo nella finestra di download attraverso il programma e nella cartella è invisibile, come risolvere il problema? Grazie.
Win 7 e il terminale è sull'unità di sistema? Volete sbarazzarvi dei problemi attuali e futuri - spostate il terminale su un'altra unità e "tutto si risolverà".
 
paladin80:
In alcuni esempi, vedo return(-1), return(0) o semplicemente return. Uso return(0) per interrompere il programma da questa posizione. Potete dirmi cosa fanno return(-1) e return?
È il valore di ritorno restituito dalla funzione. Torna alla matematica.
 
paladin80:
In alcuni esempi, vedo return(-1), return(0) o semplicemente return. Uso return(0) per interrompere il programma da questo punto. Per favore, ditemi, cosa fanno return(-1) e return?

return(-1) restituisce meno uno come risultato della funzione, che (-1) può significare qualcosa solo se lo sviluppatore di quel programma ce l'ha messo lui stesso. Altrimenti, non significa nulla.

return termina semplicemente la funzione (usato quando il tipo di ritorno è void).

 
TarasBY:
Questo è il valore restituito dalla funzione. Torna alla matematica.

In generale, return(0) ferma la funzione int start() e aspetta il prossimo tick. Se non c'è nessuna cifra o è -1, cosa succede in int start()?

 
TarasBY:
Win 7 e il terminale è sull'unità di sistema? Vuoi sbarazzarti dei problemi attuali e futuri - sposta il terminale su un'altra unità e "tutto si risolverà".

Grazie mille :) Farò un tentativo.