Errori, bug, domande - pagina 2580

 
Koldun Zloy:

1. In MQL viene copiata una stringa, non un puntatore.

_DLLAPI void fnReplaceString(wchar_t * text, wchar_t *from, wchar_t * to)
{
   wchar_t * cp;
   
   //проверка параметров
   if(text==NULL || from==NULL || to==NULL) return;
   if(wcslen(from)!=wcslen(to))             return;
 
   //поищем подстроку
   if((cp=wcsstr(text,from))==NULL)         return;

   //заменим
   memcpy(cp,to,wcslen(to)*sizeof(wchar_t));
}
#import "MQL5DLLSamples.dll"
void fnReplaceString(string & text, string from, string to);
#import


Sezione 3.3

 
Koldun Zloy:

2. Avete evidenziato una linea di 200 caratteri in MQL. Poi ci hai copiato 164 caratteri. Dopo di che, guarda la dimensione della stringa in MQL. Rimane 200.

Lunghezza, non taglia! Lunghezza in caratteri, dimensione in byte.
Controllato, dopo aver ottenuto una stringa di 164 caratteri, sì, la lunghezza è ancora 200.
Qualche idea su questo?

 
Roman:

Quindi, per farlo bene, ho rinunciato a memcpy e ho usato wcscpy o wcsncpy.
Risultato, post sopra.

Volevo dire sizeof( wchar_t* ).

 
Roman:


Sezione 3.3

Faresti meglio a non discutere con me, ma a leggere più attentamente questo articolo. E capire cosa sta succedendo lì.

Allora non avrete alcun problema.

Quello che vuoi fare non è davvero così complicato.

 
Roman:

Lunghezza, non taglia! Lunghezza in caratteri, dimensione in byte.
Controllato, dopo aver ottenuto una stringa di 164 caratteri, sì, la lunghezza è ancora 200.
Qualche idea su questo?

Il perché di questo è già stato spiegato sopra.

 
Koldun Zloy:

Quello che vuoi fare non è davvero così difficile.

Quindi ditemi se non è così difficile.
O pensate che questo sia un comportamento normale?

 
Roman:

Quindi ditemi se non è così difficile.
O pensi che questo sia un comportamento normale?

Quindi non hai nemmeno intenzione di capire qualcosa, ti danno solo una ricetta già pronta ed è tutto?

Non capisco perché vorresti fare la programmazione se è un peso per te, ma questo dipende da te.


Pensi che qualcuno vorrà aiutarti se fai una domanda e non vuoi mostrare un codice riproducibile dettagliato,

o non leggere, o discutere con chi ne sa molto di più?


Pertanto, non ci sarà una ricetta pronta. Scriverò un principio generale per ottenere una stringa da una DLL. Puoi scrivere il codice da solo, se ti consideri un programmatore.


1. In MQL si crea l'array ushort.

Inizializzare.

3. Passa l'array e la sua dimensione alla DLL.

4. Nella DLL, copiate una stringa in questo array usando la funzione wmemcpy_s().

5. Restituisce la lunghezza della stringa copiata dalla DLL.

6. In MQL, create una stringa dall'array usando la funzione ShortArrayToString().

 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 

Su uno dei server (non MQ) MT5 impazzisce - carica la CPU al 100% e registra intensamente questi messaggi per diversi strumenti:

Aggiornamento spontaneo costante di HistoryBase

I grafici lampeggiano. È impossibile lavorare.

C'è qualche possibilità di risolverlo localmente o l'unica via d'uscita è aspettare che il server finisca qualche partita?

 
Koldun Zloy:

Quindi non hai nemmeno intenzione di capire qualcosa, ti danno solo una ricetta già pronta ed è tutto?

Non capisco perché vorresti fare la programmazione se è un peso per te, ma questo dipende da te.

Pensi che qualcuno vorrà aiutarti se fai una domanda e non vuoi mostrare un codice riproducibile dettagliato,

o non leggere o discutere con chi ne sa molto di più?

Pertanto, non ci sarà una ricetta pronta. Scriverò un principio generale per ottenere una stringa da una DLL. Puoi scrivere il codice da solo, se ti consideri un programmatore.


1. In MQL si crea l'array ushort.

Inizializzare.

3. Passa l'array e la sua dimensione alla DLL.

4. Nella DLL, copiate una stringa in questo array usando la funzione wmemcpy_s().

5. Restituisce la lunghezza della stringa copiata dalla DLL.

6. In MQL, create una stringa dall'array usando ShortArrayToString().

Dove vedi una discussione qui? Questa è una discussione di lavoro, non c'è bisogno di torcere il significato in un pollaio, con pathos arrogante.
Non hai chiesto niente di pronto. Pensavo che tu e il puntatore aveste una soluzione, ma non è così.
Sei tu che non hai letto l'argomento; qui si sta discutendo di array già da molto tempo, e tutti lo sanno molto bene.
Ed è da molto tempo che propendo per gli array. Ma visto che mql ha la stringa, perché non usarla direttamente?
È esattamente il bug nella stringa di mql che copia un puntatore al suo interno che stiamo discutendo qui.
Vi dirò di più, non è solo attraverso ushort che tutto può essere risolto. Ci sono molte opzioni con gli array.
Ma nel mio caso non voglio usare gli array, poiché la struttura del codice non ha sempre senso.
Tanto più che ho la stringa di mql, con cui posso lavorare direttamente, ma deve funzionare correttamente.