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
Vous devriez ajouter au moins un paragraphe sur le débogage. L'article mentionne une situation dans laquelle AV peut se produire, mais même en laissant de côté la multitude d'autres sources potentielles d'erreurs, essayer de rechercher manuellement (à l'œil ou mentalement) l'emplacement de l'erreur peut prendre beaucoup de temps et s'avérer infructueux.
Merci pour votre commentaire. Je pense que cette section peut être élargie pour inclure les erreurs les plus populaires. Cependant, pour éviter de chercher les erreurs "longtemps et sans succès", faites tout ce qui est écrit dans l'article. Les exemples qu'il contient sont réalisables. En outre, utilisez le débogueur de MetaEditor, il est tout à fait décent, avec un débogage pas à pas et des points d'arrêt!
Dans cet article, je n'ai pas l'intention d'enseigner à quiconque comment programmer. Si quelqu'un fait des erreurs élémentaires et crie fort, , il ne devrait peut-être pas encore créer ses propres DLL et commencer à apprendre la partie mat.
Bonjour HideYourRichess.
Tu es si rapide ! Tu as écrit tellement de choses ! Tu devrais écrire tes propres articles sur Delphi.
Je vais essayer de répondre brièvement et dans l'ordre :
1. Юниты SysUtils и Classes нужно было оставить в проекте.
LesSysUtils sont dans le projet ! Les classes n'ont rien à faire ! Le gestionnaire d'exception en plus de SysUtils est implémenté dans System, qui est connecté par défaut, donc je ne vois aucune raison de s'inquiéter.
2. Vous ne devez pas utiliser toutes sortes de procédures dans DllEntryPoint (alias DllMain).
L'exemple DllEntryPoint se trouve sur Internet à tous les coins de rue. Il s'agit d'une méthode standard de création d'événements DLL, à laquelle, par exemple, vous pouvez lier l'allocation et la libération de la mémoire du tas. Si vous avez de vraies erreurs avec cette méthode de travail avec la mémoire, je suis prêt à en tenir compte.
Je ne discute pas de tout ce qui ne peut pas être fait dans DllEntryPoint, car je ne l'utilise pas souvent.
3. Vous avez beaucoup écrit sur le gestionnaire de mémoire. Je me contenterai de souligner votre conclusion:
Vous pouvez donc faire en sorte que la DLL et l'application aient un seul gestionnaire de mémoire, et ce sera le gestionnaire de mémoire de MT4.
Le problème est qu'aucun d'entre nous ne sait comment fonctionne le gestionnaire de mémoire de MT5(MT4) .Et même si nous connaissions les noms des fonctions qui mettent en œuvre ce gestionnaire, comment pourrions-nous l'utiliser, car l'API pour MT5est fermée ! L'idée d'un gestionnaire MT5 unique et d'une DLL est donc une utopie.
Pour ne pas semer la confusion dans l'esprit des lecteurs, je suggère plutôt d'utiliser la technique classique de gestion de la mémoire mise en œuvre dans les fonctions de l'API. Elle est décrite dans l'article dans la section consacrée au travail avec les chaînes de caractères.
Je compte sur le fait qu'au lieu de citer ici des livres et des articles sur Delphi, l'auteur de l'article ne sera cité que pour ce qui ne fonctionne pas vraiment par rapport à ce qui est décrit dans l'article. De préférence avec des exemples.
Je vous remercie pour votre commentaire. Je pense que cette section peut être élargie pour inclure les erreurs les plus populaires. Cependant, pour éviter de chercher des erreurs "longtemps et sans succès", faites tout ce qui est écrit dans l'article. Les exemples qu'il contient sont réalisables. En outre, utilisez le débogueur de MetaEditor, il est tout à fait décent, avec un débogage pas à pas et des points d'arrêt !
Dans cet article, je n'ai pas l'intention d'enseigner à quiconque comment programmer. Si quelqu'un fait des erreurs élémentaires et crie fort, , il ne devrait peut-être pas encore créer ses propres DLL et commencer à apprendre la partie mat.
Hélas, vous vous trompez lourdement. Les personnes qui apprennent à programmer ne sont pas les seules à commettre des erreurs - qu'elles soient élémentaires ou non -, les programmeurs chevronnés le font également.
Cela n'a rien à voir avec les mathématiques, mais avec les outils de débogage. Rappelons la célèbre statistique "80 par 20" : 80 % du temps est consacré au débogage et seulement 20 % à l'écriture du code. Si j'ai bien compris, l'objectif de l'article est de vous apprendre à écrire une DLL viable, c'est-à-dire non seulement l'exemple spécifique donné, mais aussi un autre code hypothétique. Bien sûr, il est impossible d'envisager toutes les erreurs potentielles, mais nous avons besoin d'informations sur la manière de les détecter en principe. Sinon, les lecteurs ne pourront rien faire d'autre que de reproduire l'exemple.
Le MetaEditor n'a rien à voir avec cela non plus, car nous parlons du débogage d'une DLL, c'est-à-dire de ses éléments internes.
Vous êtes l'auteur - vous savez mieux que quiconque. Je n'ai fait qu'exprimer mon opinion sur le caractère incomplet de la présentation.
Ce sont des extraits d'un vieil article sur les dll pour mt4, inachevé. J'ai simplement copié les extraits ici. Ce n'est pas difficile et ce n'est pas long.
"SysUtils est dans le projet ! Les classes n'ont rien à voir avec ça ! Le gestionnaire d'exception en plus de SysUtils est implémenté dans System qui est connecté par défaut, donc je ne vois pas de raison de s'inquiéter. "
C'est au propriétaire de décider quelles unités inclure. Mais je pense qu'il est nécessaire de préciser pourquoi. Dans ce cas, SysUtils et Classes sont recommandés par Borland. Et il y a des raisons à cela.
"L'exemple de DllEntryPoint est donné sur Internet à tout bout de champ. Il s'agit d'une méthode standard de création d'événements DLL, à laquelle, par exemple,"
Borland n'a pas caché DllMain des mains malveillantes par accident. La façon standard de créer une DLL dans Delphi est de cacher DllMain. Réfléchissez à la raison pour laquelle il en est ainsi. Lisez également les recommandations de Microsoft.
"Vous pouvez lier l'allocation et la libération de la mémoire à partir du tas. Si vous avez de vraies erreurs avec cette méthode de travail avec la mémoire, je suis prêt à l'envisager."
C'est à vous de décider. Mais je recommande de ne rien faire du tout dans DllMain.
"Le problème est qu'aucun d'entre nous ne sait comment fonctionne le gestionnaire de mémoire de MT5(MT4) .Et même si nous connaissions les noms des fonctions qui implémentent ce gestionnaire, comment allez-vous l'utiliser, car l'API pour MT5est fermée ! L'idée d'un gestionnaire MT5 unique et d'une DLL est donc une utopie".
;-) pour quelqu'un c'est "fermé" et "utopie" - et pour quelqu'un d'autre "tout fonctionne". nous parlons de 4. je n'ai pas regardé 5.
Il convient de mentionner qu'il existe une alternative à l'utilisation de Delphi.
Si vous n'êtes pas déjà un utilisateur de Delphi, vous devriez envisager d'utiliser Lazarus/FPC, c'est un logiciel libre, il a presque les mêmes fonctionnalités que Delphi (et même un peu plus), il est largement compatible avec le code source de Delphi et je parierais même que tous les exemples ci-dessus se compilent dans Lazarus sans aucune modification.
Si vous préférez les logiciels libres aux logiciels propriétaires (ce que vous devriez faire de toute façon), Lazarus est ce que vous recherchez et non une version d'essai commerciale de Delphi.
Il existe une telle procédure dans l'article :
Le compilateur me demande ce qu'est la variable non déclarée BUFFER_SIZE.
Pourriez-vous me dire ce qu'elle devrait vraiment être, où elle devrait être déclarée et de quelle mémoire tampon il s'agit ?
Le compilateur me demande ce qu'est la variable non déclarée BUFFER_SIZE.
Pourriez-vous me dire ce qu'elle devrait contenir, où elle devrait être déclarée et de quel tampon il s'agit ?
Dans le fichier de projet dll_mql5.dpr , il y a la déclaration suivante
const BUFFER_SIZE = 255;
Par une ligne de code
Buffer:=AllocMem(BUFFER_SIZE);
la mémoire pour stocker la chaîne est allouée dans le tas.
Le pointeur de tampon lui-même est utilisé dans la fonction GetStringBuffer, qui montre comment travailler avec des chaînes de caractères.
Aide DLL
Est-ce qu'on peut utiliser le fichier DLL de MT4 sur MT5 et si oui... où est-ce qu'on l'insère dans MT5 et n'importe quoi d'autre que j'ai besoin de savoir.
De plus, dans quel dossier devons-nous stocker le fichier DLL ?
Je n'ai plus le code de la DLL donc je ne peux plus le réécrire.
Je n'ai plus le code de la DLL et je ne peux donc plus la réécrire.
En connectant l'Expert Advisor dans MT5, j'obtiens l'erreur "dll is not 64-bit version".
Existe-t-il un moyen d'utiliser une dll 32bit ?
Sinon, quelqu'un peut-il me dire comment compiler une dll 64 bits dans Delphi XE ?
Comment compiler une dll 64it dans Delphi XE ?