Erreurs, bugs, questions - page 2574
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Si vous imprimez les résultats de ces fonctions en ontick, c'est pour le moment 1970.01.01 pour le prix 0.
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 ?
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.
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 ?
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
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
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é.
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 ?
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 wchar_t* dans dll
Func("Task", out);
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.