Discussion sur "Comment écrire une DLL pour MQL5 et échanger des données en 10 minutes". - page 4

 
Quel est ce message que j'obtiens "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll' ?
MT5 build 240. L'appel de la dll est autorisé.
 
joo:
Quel est ce message que j'obtiens "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll' ?
MT5 build 240. L'appel de la dll est activé.

Exemple de démonstration tiré de l'article:

4. Capture des exceptions dans les fonctions DLL

Pour éviter de faire planter le terminal lui-même, chaque appel de fonction DLL est automatiquement protégé par un wrapper Unhandled Exception. Ce mécanisme permet d'éviter la plupart des erreurs standard (invocation de mémoire inaccessible, division par zéro, etc.).

Pour vérifier l'opérabilité de ce mécanisme, créons le code suivant :

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

et l'appeler depuis le terminal :

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

En conséquence, il y aura une tentative d'écriture à l'adresse zéro et une exception sera générée. Le terminal l'interceptera, le signalera dans le journal et poursuivra son travail :

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
De l'article un exemple de démonstration :

Merci. Je n'étais donc pas très attentif lorsque j'ai lu l'article. :)

PS : j'aurais pu dire quelque chose comme : "Écoute, camarade ! Va relire l'article", et tu auras raison. Respect et respect, comme on dit.

 
Renat:

Chère Pisara,

Soyons clairs : il s'agit d'un débat entre un théoricien et un praticien.
Sans entrer dans les détails, allez droit au but. Un bon théoricien s'appuie sur l'expérience pratique, un bon praticien mesure sept fois.

Bien sûr, personne ne vous interdit de vous battre pour la "paix dans le monde", mais tenez compte d'autres facteurs que "pourquoi ne pas améliorer ?

C'est ce que j'ai écrit - vous ne l'utiliserez pas, parce que vous ne voulez pas faire du travail de routine. Il faudra vous donner tout sur un plateau d'argent - tous les indicateurs, tout l'environnement du marché, tout l'historique des différentes périodes, etc. Et vous devez faire des graphiques, car vous ne pourrez pas manipuler tous les indicateurs dans votre tête.

Vous avez donc besoin d'un terminal complet. Et nous vous le donnons : MetaTrader 5 + MQL5 + DLL. Appelez-le un cadre ou dites simplement - donnez-nous le terminal en code source/composants (car c'est ce que vous demandez).

Il ne s'agit pas de faire la paix ici, mais vous devez convenir que faciliter la vie du programmeur et améliorer la qualité du système commercial + ses capacités d'intégration n'a encore fait de mal à personne. Exemples proches : Borland Delphi, MS .net ont un cadre entièrement ouvert / une base de composants / des diagrammes de classe et même une partie importante du code source (Delphi) pour les utilisateurs de la plate-forme.

Les programmeurs considèrent à tort qu'il est "puissant" de pouvoir écrire des scripts pour des systèmes de négociation dans des langues maternelles non protégées, et s'étonnent ensuite que personne n'utilise leurs créations. C'est pourquoi ils meurent avant de naître. Ceux qui ont développé et créé une communauté d'utilisateurs réfléchissent beaucoup plus profondément (parce qu'ils ont reçu les coups avant) et ne font pas de telles erreurs.
Soyons réalistes. Si vous voulez lancer un logiciel et le vendre, puis publier une mise à jour payante dans six mois ou un an, la protection du code est très importante pour vous. Si, comme je l'ai compris, vous êtes là pour le long terme et améliorez continuellement la plateforme avec une chaîne de constructions et de support, alors aucun concurrent ne vous aura. Mais les utilisateurs seront en mesure d'écrire un bien meilleur code. Et pas seulement le code, mais aussi la structure du CT, qui n'est pas moins importante ! Je peux même faire une analogie avec les antivirus - le piratage du client AV ne donne pas encore accès à la mise à jour de la base de données des virus (ici - les quotas).

L'appel contrôlé (désactivé par défaut) de DLL est acceptable, mais le téléchargement de DLL faites par quelqu'un d'autre sur votre terminal de trading est un trou qui est pire qu'un Internet Explorer 6 non patché.
Ce trou n'est donc qu'une autorisation de l'utilisateur ! Comment un utilisateur médiocre peut-il garantir l'absence totale de DLL nuisible, même si elle est signée par la société X ? Après tout, s'il l'interdit dans le doute, il ne saura jamais si elle lui sera utile ou non. Nous avons donc ici un peu de psychologie.


Pour votre information, les statistiques de Google Trends sur les terminaux de trading avec automatisation:

Je me demande si l'échelle des ordonnées est logarithmique ?
Au fait, les données russes sont intéressantes et nous pouvons voir que le rouge de Metastock est en tête :

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Utilisez les fonctions normales de "réponse", s'il vous plaît. C'est très inconfortable à lire.

Pour séparer un bloc cité, placez votre curseur à l'endroit voulu et sélectionnez le style "Texte brut" ou appuyez sur Ctrl+1.


D'une manière générale, je vous recommande d'arrêter avec ce type de conseil - il est fondamentalement mortel, fondé sur des hypothèses erronées et ne convient pas au langage appliqué.

En guise de plaisanterie, il y a une vieille blague :

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Un passant s'approche d'un Juif, jette un rouble et dit :

- Écoutez, changez le signe, sinon vous resterez affamé.

Lorsque le passant est parti, le Juif s'est tourné vers son voisin et a dit :

- Tu comprends, Izya ? Cet homme va nous apprendre le commerce !

 
Renat:

Utilisez les fonctions normales de "réponse", s'il vous plaît. C'est très inconfortable à lire.

Pour rompre un bloc cité, placez votre curseur au bon endroit et sélectionnez le style "Texte brut" ou appuyez sur Ctrl+1.


En général, je recommande d'en finir avec ce genre de conseils - ils sont fondamentalement mauvais, fondés sur un postulat erroné et ne conviennent pas à un langage appliqué.

En guise de plaisanterie, il y a une vieille blague :


OK, si vous ne voulez pas donner les vraies raisons pour lesquelles la prémisse est mortelle et pourquoi le cadre .net est exigu pour vous, la discussion est terminée. En ce qui concerne la plaisanterie, mesurez par vous-même, le monastère est à vous.

Reste à souhaiter bonne chance à tout le monde pour ne pas regarder en arrière après la mise à niveau vers 5.

 
Renat, merci beaucoup pour cet article ! C'est très intéressant et instructif. Malheureusement, je n'ai pas réussi à utiliser le script MQL5DLL Test.mq5. J'ai fait tout ce qui est décrit dans l'article. Cependant, quand j'ai exécuté le script, MT5 s'est écroulé. Je ne sais pas quel est le problème. Peut-être s'agit-il de la question de l'axe ? J'utilise MS Vista x64. Veuillez m'indiquer comment résoudre ce problème :-)
 
denkir:
Renat, merci beaucoup pour cet article ! C'est très intéressant et instructif. Malheureusement, je n'ai pas réussi à utiliser le script MQL5DLL Test.mq5. J'ai fait tout ce qui est décrit dans l'article. Cependant, quand j'ai exécuté le script, MT5 s'est écroulé. Je ne sais pas quel est le problème. Peut-être s'agit-il de la question de l'axe ? J'utilise MS Vista x64. Veuillez m'indiquer comment résoudre ce problème :-)

Relisez l'article en entier, s'il vous plaît.

Il y a juste un endroit où la génération d'erreurs (écriture dans des adresses nulles) à l'intérieur de la DLL, et la capture d'erreurs supplémentaires par le terminal sans plantage. Il est nécessaire de commenter l'appel de la méthode fnCrashTest.

Aujourd'hui, je vais vérifier ce code sur Vista x64 - peut-être que c'est notre erreur.

 
Renat писал(а) :

Relisez l'article en entier, s'il vous plaît.

Il n'y a qu'un endroit où l'on peut générer des erreurs (écriture dans des adresses nulles) à l'intérieur de la DLL et où l'on peut attraper cette erreur par le terminal sans se planter. Vous devez commenter l'appel de la méthode fnCrashTest.

Aujourd'hui, je vais vérifier ce code sur Vista x64 - peut-être que c'est notre erreur.

Oui, j'ai tout lu attentivement et plus d'une fois :-))

J'ai oublié de vous dire que j'ai commenté la fonction fnCrashTest(int arr) dans le script MQL5DLL Test.mq5. Je reçois toujours un crash. :-(

Voilà à quoi ça ressemble. Ou je dois commenter la fonction fnCrashTest(int arr) dans le code de la dll ?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) quelle version du terminal est 32 ou 64 bit ?

2) quelle version de la dll est 32 ou 64 bit ?

Raison: