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
uchar - Unsigned Character (caractère non signé), pourquoi l'utiliser pour une boucle ? cela n'a aucun sens pour moi... utilisez un int. Vous allez travailler avec des ulongs, c'est ce qu'est une nouvelle datetime... et si vous tapez sans y penser à l'avenir, vous serez averti... faites avec ou ignorez l'avertissement. Ne vous contentez pas d'espérer le meilleur, faites comme vous le faites maintenant, apprenez et comprenez.
Ce que vous avez posté sur stackoverflow me paraît logique, je pense que c'est un bon conseil.
uchar n'était qu'un exemple car ma question concernait l'utilisation de petits types de variables. uchar est une valeur positive de 1 octet de 0 à 255, donc pour une boucle de 0 à 100, vous pourriez utiliser le 1 octet uchar.
Si vous avez besoin de sauvegarder une valeur renvoyée par une fonction et que la fonction en question renvoie un uchar, alors utilisez une variable uchar pour sauvegarder la valeur renvoyée... avec la mql4 originale, ce n'était pas un problème, ce sera plus un problème avec la nouvelle mql4.
Quand j'ai posé la question, je ne savais pas pourquoi je voudrais le faire, c'est pourquoi j'ai posé la question lol...
Je ne savais pas si un type de variable de 8 bits serait traité plus rapidement qu'un 32 bits ou s'il serait plus lent ou juste pareil, je ne savais pas si une valeur de 8 bits utiliserait moins de RAM ou moins d'espace disque. vu que nous avons maintenant ces petits types de variables à notre disposition, j'étais juste intéressé de connaître les avantages et les inconvénients de les utiliser quand ils correspondent aux exigences du bloc de code, par rapport au fait de s'en tenir aux entiers de 32 bits sur toute la ligne.
Je pensais que peut-être un système d'exploitation 32 bits pouvait traiter quatre valeurs 8 bits en même temps, mais je ne le savais pas. Apparemment non. Cela explique pourquoi un système d'exploitation 64 bits n'est pas vraiment plus rapide qu'un système 32 bits, à l'exception du fait qu'il peut accéder à plus de RAM. Je me suis souvent posé cette question.
J'ai une question, pour laquelle je n'ai pas trouvé de solution.
Comment utiliser void&? Je veux dire, si j'ai besoin d'envoyer un pointeur à une DLL. Dans le fichier d'aide, il y a des fonctions qui utilisent ce type void, mais si je le place n'importe où dans la source, il ne compile pas. J'ai essayé d'utiliser un modèle comme solution de rechange, mais les modèles sont interdits dans l'instruction #import.
J'ai géré la construction pour les types simples, mais je ne suis pas en mesure de passer un pointeur de tableau void& à la DLL, à moins de spécifier le type explicite.
Y a-t-il une limitation pour passer un tableau de structures à une DLL ?
Supposons que MT4Structure soit une structure simple.
Ayant importé la dll kernel32.dll, une seule structure fonctionne très bien :
mais je n'arrive pas à faire fonctionner l'acceptation d'un tableau de structures. Le compilateur ne compile pas avec MT4Structure&[] si elle est envoyée comme paramètre à cette déclaration :
Y a-t-il une limitation pour passer un tableau de structures à une DLL ?
Je ne vois pas de problème avec quelque chose comme ça :
Cela fonctionne comme prévu (à condition que vous autorisiez différents alignements de structures par défaut dans MT4 et dans la DLL).
(BTW, je ne suis pas vraiment sûr de la représentation interne d'un bool MQL4 maintenant, mais je préfère déclarer les fonctions Win32 comme retournant des int. Les fonctions Win32 renvoient un BOOL plutôt qu'un bool C++. Un BOOL est une macro Windows pour un entier de 4 octets, dont la valeur est 1/0, alors qu'un bool C++ est un seul octet. Si vous dites à MT4 de s'attendre à un seul octet de valeur de retour des fonctions alors qu'elles renvoient en réalité quatre octets, vous pourriez - bien que ce soit très improbable - vous retrouver avec une corruption de la pile).
Comment utiliser void&? Je veux dire, si j'ai besoin d'envoyer un pointeur à une DLL.
Je ne suis pas tout à fait sûr de la nature de votre question. Par exemple, la documentation de l'API Win32 utilise void* pour signifier "ceci accepte tout type de pointeur vers n'importe quoi ; la fonction Win32 ne se soucie pas de votre bloc de mémoire".
Je ne suis pas tout à fait sûr de la nature de votre question. Par exemple, la documentation de l'API Win32 utilise void* pour signifier "ceci accepte tout type de pointeur vers n'importe quoi ; la fonction Win32 ne se soucie pas de votre bloc de mémoire".
Exactement. Mais il semble que ce ne soit pas tout à fait possible avec le MQL4, et l'utilisation d'un modèle n'est pas autorisée dans le bloc #import. Ainsi, l'utilisation d'une structure supplémentaire avec winapi se traduit par une mise à jour manuelle des déclarations #import à chaque fois qu'un nouveau type est nécessaire. Ce qui est plutôt désagréable pour moi, puisque mon intention était de gérer les importations en un seul endroit.
Exactement. Mais il semble que ce ne soit pas tout à fait possible avec le MQL4, et l'utilisation d'un modèle n'est pas autorisée dans le bloc #import. Ainsi, l'utilisation d'une structure supplémentaire avec winapi se traduit par une mise à jour manuelle des déclarations #import à chaque fois qu'un nouveau type est nécessaire. Ce qui est plutôt désagréable pour moi.