Erreurs, bugs, questions - page 1017
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
Arrêtons avec la réponse de ServiceDesk :
"Lors de la compilation de 1.mq5, à l'intérieur de la fonction B(), il n'est pas clair quelle fonction doit être appelée,
importée A() ou exportée A() - parce que le compilateur ne comprend pas que vous vouliez dire la même fonction"
Ils ont raison sur la forme - mais si vous le vouliez, le compilateur pourrait (et devrait) être informé qu'il s'agit de la même fonction, car je répète que le nom du module au moment de la compilation est disponible (spécifié dans #import).
D'autant plus que si vous mettez d'abord : : à un endroit et compilez, puis supprimez et mettez : : à un autre - tout fonctionne, mais vous devez en convenir - c'est très gênant et après 10-15 permutations forcées de ce genre, je suis passé à #define
Arrêtons avec la réponse de ServiceDesk :
"Lors de la compilation de 1.mq5, à l'intérieur de la fonction B(), il n'est pas clair quelle fonction doit être appelée,
A() importé ou A() exporté - car le compilateur ne comprend pas qu'il s'agit de la même fonction".
Ils sont corrects dans la forme - mais le compilateur pourrait (et devrait) être informé qu'il s'agit de la même fonction si on le souhaite, car je répète que le nom du module est disponible au moment de la compilation (spécifié dans #import).
Pour de telles indications, il existe un opérateur de résolution de contexte ": :", mais il n'est pas applicable dans ce cas car le nom du module (fichier) est également le même.
Le conseil est adéquat - changez la structure du programme.
D'autant plus que si vous mettez d'abord : : et compilez à un endroit, puis enlevez et mettez : : à un autre, tout fonctionne, mais vous devez convenir que c'est très gênant...
et après 10-15 permutations forcées de ce type, je suis passé à #define
Les définitions paramétrées ne sont utiles que lorsque la détection des types est indésirable ou lorsque les paramètres sont remplacés par des morceaux de texte "verbeux". En tant que substitut d'une fonction inline, une définition est sans aucun doute nuisible à la santé d'un programme.
--
Dans votre cas, je refuserais d'utiliser les bibliothèques .ex5, et tout fonctionnerait parfaitement. Leur seule utilité pratique est de cacher l'implémentation (lors de la vente), et je ne vois pas leur utilité dans les autres cas.
Vous écrivez pour vendre ?
Vous écrivez pour vendre ?
Pour moi-même.
Je ne peux pas le faire sans .ex5. J'ai aussi des fonctions comme F( string& [] ), mais elles ne rentrent pas dans les .dll :)
On pourrait peut-être les pousser à travers un séparateur, mais je n'ai pas encore essayé.
MQL5 n'a pas de fonctions en ligne (dans le formulaire) et j'utilise des macros paramétriques à la place, ce qui n'est pas tout à fait correct, car il n'y a pas de contrôle de type.
De plus, le compilateur n'optimise pas les expressions, ce qui entraîne une perte de vitesse supplémentaire. Vous feriez mieux de vérifier.
Au fait, à propos de l'inlining - ça marche. J'ai eu quelques problèmes avec le débogueur à cause de cela.
Au fait, à propos de l'inlining, cela fonctionne. Il y a également eu des problèmes avec le débogueur à cause de cela.
Cela fonctionne donc au niveau du compilateur. J'ai donné un exemple ci-dessus - tout fonctionne grâce à un inexplicable "contournement du compilateur", alors que le travail direct nécessite des étapes supplémentaires, parfois importantes, parce que, comme vous l'avez suggéré, il est certainement possible de ne pas inclure la description et la mise en œuvre d'une seule et même fonction dans un fichier, mais alors 10 .mqh complets sont divisés en 100 .mqh plus petits.
Je n'ai pas encore couru après la vitesse. L'essentiel est la commodité et le fait que la quantité de code ne croisse pas de manière exponentielle.
J'ai même été confronté à la nécessité d'utiliser des analogues de #if #else dans MQL5 (c'est un peu délicat jusqu'à présent, mais ça marche ici et là).
Je ne cherche pas encore la vitesse. L'essentiel est la commodité et le fait que le volume de code ne croisse pas de manière exponentielle.
A100:
Il ne fonctionne pas sans .ex5. J'ai aussi des fonctions comme F( string& [] ), mais elles ne rentrent pas dans .dll :)
....
Bon sang... :)
Je n'ai pas suggéré d'utiliser des DLL au lieu des bibliothèques .ex5, mais juste beaucoup de .mqh et un exécutable .mq5, rien de plus.
Juste des tas et des tas de .mqh et un exécutable .mq5, rien d'autre.
Ne fonctionne pas en dehors des périodes de négociation. Qu'est-ce qui vous gêne ?
Etes-vous sûr des paramètres ?
Les deux exemples sont faux :
On dirait qu'il y a confusion avec ChartSetInteger?