Il mio approccio. Il nucleo è il motore. - pagina 99

 
Реter Konow:
In breve, ogni volta che si cambia il valore di un parametro utente, questo valore dovrebbe essere convertito in una variabile unificata e immediatamente salvato in un array di byte condiviso, che si può poi convertire in uint e scrivere nella risorsa.

Dovete avere un parametro utente all'interno della struttura di unione. Quando si cambia il parametro, la struttura cambierà con un cambiamento simultaneo dell'array int

union c
{
  uint i[2];
  long width;
}cc;
 
cс.width = 200;

i[2] è una risorsa utente che viene letta da un altro programma.

Con una linea cc.width = 200 cambierete:

  1. Il parametro responsabile della larghezza,
  2. La struttura che contiene questo parametro,
  3. L'array della risorsa che viene letta dall'altro programma.

E non c'è nessuna conversione e copia qui, solo la mappatura.
 
Vasiliy Sokolov:


Posso cambiare le funzioni wrapper nel file Connection Properties e convertire ogni valore utilizzabile nella variabile corrispondente dell'unione, e fare un array di byte al volo. Ma, i valori di testo che devono essere passati, convertiti in array di byte usandoStringToChar().

Tuttavia, questo rimuove il punto di usare un'unione. Dopo tutto, se devocomunque usareStringToChar(), perché non assemblare tutto in una stringa e poi tradurre l'intera stringa in byte usandoStringToChar()?

 
Vasiliy Sokolov:

Dovete avere un parametro utente all'interno della struttura di unione. Quando si cambia il parametro, la struttura cambierà con un cambiamento simultaneo dell'array int

i[2] è una risorsa utente che viene letta da un altro programma.

Con una linea cc.width = 200 cambierete:

  1. Il parametro responsabile della larghezza,
  2. La struttura che contiene questo parametro,
  3. L'array della risorsa che viene letto da un programma di terze parti.

E non c'è nessuna conversione o copia qui, solo la mappatura.

Vasily, dimentichi che stiamo parlando di una comunicazione a due vie. Nel mio motore, posso legare tutto alle unioni, ma non posso essere responsabile del codice utente. Posso solo inventare dei wrapper e metterli nei plugin.

Dov'è la garanzia che l'utente userà anche i sindacati? Così, quando chiama le mie funzioni wrapper, devo prendere io stesso il suo valore e fare il cast a una delle mie variabili dalle mie unioni all'interno del suo file plugin.

 
Реter Konow:

Posso cambiare le funzioni wrapper nel file Connection Properties e convertire ogni valore utilizzabile nella variabile corrispondente dell'unione, e fare un array di byte al volo. Ma, i valori di testo che devono essere passati, convertiti in array di byte usandoStringToChar().

Tuttavia, questo rimuove il punto di usare un'unione. Dopo tutto, se devocomunque usareStringToChar(), perché non assemblare tutto in una stringa e poi tradurre l'intera stringa in byte usandoStringToChar()?

Perché avrete un doppio parsing. Converte tutto in una stringa, è molto lento. Poi si analizza la stringa in un array, il che è molto veloce. Poi lo assemblate di nuovo in una stringa - è molto veloce. Poi si analizza la stringa nei tipi giusti - questo è molto lento.

 
Реter Konow:

Ok, ma che dire dei testi?

Devono essere convertiti in byte tramiteStringToChar(). Non si può usare l'unione, giusto?

Sì, bisogna tradurli, ma è veloce, a differenza del parsing.

 

Per esempio:

Ecco la funzione wrapper nel file del plug-inConnection Properties:

string E_Last_10_bars_2_Close_price(string n = rare_value,  int Property = -1){return(GET_N_SET(11,n,Property));}

Questa funzione si chiama così:

E_Last_10_bars_2_Close_price(Close[2]);

Cioè, l'utente imposta il valore diClose[2] in una cella della tabella.

Close[2] - это значение дабл.

Quindi, all'interno della sua funzione wrapper nel suo programma, posso rappresentare il valore(Close[2]) come un array di char.

Ma, nella stessa cella, l'utente può inviare il valore "Ciao! :)", e allora cosa fare?

E_Last_10_bars_2_Close_price("Привет! :)");
 
 

Oh, Peter, hai iniziato con il linguaggio di programmazione sbagliato. Avresti dovuto imparare qualcosa di non strettamente digitato.

In generale, ti ho capito, hai inventato il tuo linguaggio non tipizzato basato su MQL. Hai aggirato la sua rigida digitazione usando le stringhe. Questa è una manovra!

 
Vasiliy Sokolov:

Oh, Peter, hai iniziato con il linguaggio di programmazione sbagliato. Avresti dovuto imparare qualcosa di non strettamente digitato.

In generale, ti ho capito, hai inventato il tuo linguaggio non tipizzato basato su MQL. Hai aggirato la sua rigida digitazione usando le stringhe. Questa è una manovra!

Si,)) Una mossa con un cavaliere!

 

Se state usando una tabella, dovete decidere se volete che i dati nella tabella siano strettamente numerici o testuali. Se testo, si passa in stringhe. Se è reale, la vostra funzione deve assomigliare a questa:

string E_Last_10_bars_2_Close_price(double n,  int Property = -1){return(GET_N_SET(11,n,Property));}