Erreurs, bugs, questions - page 2574

 
Aleksei Beliakov:
Si vous imprimez les résultats de ces fonctions en ontick, c'est pour le moment 1970.01.01 pour le prix 0.
Avant, c'était l'heure du bar ou du prix.
Alors maintenant, c'est comme ça

Quel est lecode d'erreur?

Quels sont les paramètres de l'essai ?

Les données des semaines et des mois sont-elles chargées ? Combien y en a-t-il au total ?

 
Slava:

Quel est lecode d'erreur?

Quels sont les paramètres de l'essai ?

Les données par semaines et par mois sont-elles téléchargées ? Combien y en a-t-il au total ?

J'ai revérifié et tout fonctionne maintenant.

J'ai téléchargé l'histoire.

Merci.

 
Je suis sûr que ce sujet a déjà été abordé : il devrait être possible de faire coexister deux versions différentes de MT5 sur un même bureau (en désactivant la mise à jour automatique et le retour en arrière). Ou au moins la version bêta et la sortie. Ou bien c'est possible (sans virtualisation).
 

Observation de la mémoire.

J'ai des CopyRates exécutés environ un millier de fois dans mon code.

Ensuite, le tableau de citations est traité d'une manière ou d'une autre, et à la fin, j'appelle :

ArrayRemove(ArrayQuotes,0,ArraySize) ;

ArrayFree(ArrayQuotes) ;

ArrayResize(ArrayQuotes,0) ;

ArrayFree(ArrayQuotes) ;

ZeroMemory(ArrayQuotes) ;

(juste expérimenté différemment)

Résultat - la mémoire continue de croître géométriquement et s'engorge, ainsi que la charge sur les processeurs - le processeur i7 s'engorge de 80% au total sur tous les cœurs logiques, la mémoire est supérieure à Giga.

Jusqu'à présent, j'ai réussi à limiter la consommation de ressources à l'aide d'un programme tiers - CPU pas plus de 15% et mémoire pas plus de Giga.

Question : s'agit-il d'un bogue ou d'une fonctionnalité de la plate-forme ?

 
Est-il possible de sélectionner de manière rigide l'encodage de la source ? Je sais que lorsque les caractères sont uniquement ascii, il s'agit d'un seul octet, sinon c'est utf-16. Can utf-8 ?
 

Au fait, le comportement étrange du méta-éditeur devrait être corrigé :

fn_call();/////////////////////

Un double-clic sur les barres obliques met en évidence les barres obliques avec le caractère précédent (s'il ne s'agit pas d'un chiffre ou d'une lettre).

Pourquoi un inconvénient ? J'ai fait une modification temporaire dans le code, j'ai mis en évidence les espaces de cette façon, puis j'ai dû rapidement mettre en évidence et supprimer les barres obliques simples.

 

On en revient toujours à la question du passage de chaînes de caractères à partir d'une dll, wchar_t* comme pointeur.
D'après l'article de Renat sur le travail avec des chaînes dans une dll, il est clair que le type mql string prend un pointeur sur une chaîne wchar_t* de la dll externe.
En d'autres termes, nous envoyonswchar_t* à la dll et le recevons comme chaîne & dans mql.
Mais la fonction C

wcscpy_s(wchar_t *dest, rsize_t  dest_size, const wchar_t *src);

ne fonctionne pas correctement, c'est-à-dire qu'un pointeur vers la chaînewchar_t* dest est reçu dans mql, mais échoue et entre et sort.
Parfois, le terminal se bloque et le programme est interrompu.

Avec la fonction

wcscpy(wchar_t *dest,  const wchar_t *src);

Le terminal ne se plante pas, mais les chaînes de caractères arrivent aussi par intermittence.
Veuillez corriger dans la prochaine version.

ZS. J'ai oublié de préciser que le pointeurwchar_t* est passé depuis un autre thread.
C'est-à-dire que la fonction wcscpy_s ou wcscpy est appelée dans un thread séparé.

 
Roman:

On en revient toujours à la question du passage de chaînes de caractères depuis la dll, wichar_t* comme pointeur.
D'après l'article de Renat sur le travail avec des chaînes dans une dll, il est clair que le type mql string prend un pointeur sur la chaîne wichar_t* de la dll externe.
En d'autres termes, nous envoyons wichar_t* à la dll et le recevons sous forme de chaîne & dans mql.
Mais pour une raison quelconque, la fonction C

ne fonctionne pas correctement, c'est-à-dire qu'un pointeur vers la chaînewichar_t* dest est reçu dans mql mais échoue et entre et sort.
Parfois, le terminal se bloque et le programme est interrompu.

Avec la fonction

Le terminal ne se plante pas, mais les chaînes de caractères arrivent aussi par intermittence.
Veuillez corriger dans la prochaine version.

ZS. J'ai oublié de mentionner que le pointeur wichar_t* est passé depuis un autre thread.
C'est-à-dire que la fonction wcscpy_s ou wcscpy est appelée dans un thread séparé.

Et qui va allouer la mémoire pour les chaînes de caractères ?
 
Vladimir Simakov:
Et qui va allouer la mémoire pour les chaînes de caractères ?

La mémoire est allouée dans le code mql en tant que

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit(out, 165, 32);

et passé comme un pointeur à la mémoire allouée, puisque la chaîne dans mql est wchar_t* dans dll

Func("Task", out);
 
Roman:

La mémoire est allouée dans le code mql en tant que

et passé comme un pointeur à la mémoire allouée, puisque la chaîne dans mql est wichar_t* dans dll

Oh, quel gâchis...

Je ne connais pas l'implémentation de la chaîne, je ne peux que deviner, mais à en juger par l'erreur, string out crée un pointeur sur la pile qui est initialisé à 0x0000000000 et vous déréférencez sans risque un pointeur nul dans la dll.