Il était nécessaire de transférer d'énormes quantités (gigaoctets) de données. La mise en œuvre à l'aide de cette bibliothèque s'est malheureusement révélée très peu performante.
Il est étonnant que cette astuce ait pu fonctionner pour quelqu'un. Avec de tels problèmes à l'intérieur... Voici un fragment de CMemMapApi::Write() ArrayResize(src, size) ; memcpyX(src, view, size) ; // a pris le bytebuffer for(int i=0 ; i
Malheureusement, le FileMapping présente un inconvénient majeur. Si l'application enfant (qui lit les données) n'a pas terminé son travail correctement pour une raison quelconque ( appels kernel32 ::UnmapViewOfFile et kernel32::CloseHandle) , le "fichier" reste suspendu en mémoire jusqu'à ce que tous les processus à partir desquels il a été ouvert soient fermés ( appels kernel32::OpenFileMappingW et kernel32::MapViewOfFile). En particulier, il n'est pas possible de modifier sa taille - il faut le rouvrir (fermer et rouvrir).
Jen'ai pas trouvé de solution à ce problème. Il est difficile de rencontrer une telle situation avec cette bibliothèque, car chaque action commence par une ouverture et se termine par une fermeture. C'est pourquoi elle est si lente. Mais il se peut que vous rencontriez quand même cette erreur. Le programme MQL se bloque alors avec ce message.
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
J'essaie de vérifier le fonctionnement de cet exemple https://www.mql5.com/fr/code/818
J'utilise MT5 Version : 5.00 build 5370 17 Oct 2025.
Pour une raison quelconque, j'obtiens des erreurs lorsque j'essaie de compiler le fichier memmap.mq5 :
memmap.mq5
MemMapLib.mqh
wrong parameters count, 4 passed, but 3 requires MemMapLib.mqh 2799
long CMemMapFile::Open(string,int,int) MemMapLib.mqh 25119
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding MemMapLib.mqh 2799
see declaration of function 'CMemMapFile::Open' MemMapLib.mqh 25119
see declaration of function 'CMemMapApi::Open' MemMapLib.mqh 12219
wrong parameters count, 3 passed, but 1 requires MemMapLib.mqh 2929int CMemMapFile::Fill(uchar) MemMapLib.mqh 25314
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding MemMapLib.mqh 2929
see declaration of function 'CMemMapFile::Fill' MemMapLib.mqh 25314
see declaration of function 'CMemMapApi::Fill' MemMapLib.mqh 12414
wrong parameters count, 4 passed, but 1 requires MemMapLib.mqh 29916int CMemMapFile::Grows(int) MemMapLib.mqh 25514
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding MemMapLib.mqh 29916
see declaration of function 'CMemMapFile::Grows' MemMapLib.mqh 25514
see declaration of function 'CMemMapApi::Grows' MemMapLib.mqh 125193 errors, 3 warnings 33
Est-ce que quelqu'un peut me dire ce que je fais mal ? Et comment y remédier ?
fxsaber #: Les sources de la bibliothèque ne répondent pas aux exigences actuelles du langage MQL5.
Existe-t-il un moyen de les corriger ? Ou est-il nécessaire de retravailler toutes les sources et il est impossible de le faire sans l'auteur ? Je pense que le compilateur n'a généré que 3 erreurs ici. Ce serait formidable si cela pouvait être corrigé.
Existe-t-il un moyen d'y remédier ? Ou bien est-il nécessaire de retravailler toutes les sources et il est impossible de le faire sans l'auteur ? Je pense que le compilateur n'a donné que 3 erreurs ici. Ce serait formidable si cela pouvait être corrigé.
Et ici, j'ai déjà corrigé le code moi-même. Ceux qui en ont besoin peuvent l'utiliser. L'Expert Advisor se compile avec succès.
J'ai ajouté ceci à partir de la ligne 251 :
using CMemMapApi::Open;
using CMemMapApi::Close;
using CMemMapApi::Fill;
using CMemMapApi::Grows;
using CMemMapApi::Write;
using CMemMapApi::Read;
Il était nécessaire de transférer d'énormes quantités (gigaoctets) de données. La mise en œuvre à l'aide de cette bibliothèque s'est malheureusement révélée très peu performante.
J'ai dû la refaire entièrement en utilisant le jeu de DLL d'origine. Cela a fonctionné rapidement.
Malheureusement, le FileMapping présente un inconvénient majeur. Si l'application enfant (qui lit les données) n'a pas terminé son travail correctement pour une raison quelconque ( appels kernel32 ::UnmapViewOfFile et kernel32::CloseHandle) , le "fichier" reste suspendu en mémoire jusqu'à ce que tous les processus à partir desquels il a été ouvert soient fermés ( appels kernel32::OpenFileMappingW et kernel32::MapViewOfFile). En particulier, il n'est pas possible de modifier sa taille - il faut le rouvrir (fermer et rouvrir).
Jen'ai pas trouvé de solution à ce problème. Il est difficile de rencontrer une telle situation avec cette bibliothèque, car chaque action commence par une ouverture et se termine par une fermeture. C'est pourquoi elle est si lente. Mais il se peut que vous rencontriez quand même cette erreur. Le programme MQL se bloque alors avec ce message.
Pour une raison quelconque, j'obtiens des erreurs lorsque j'essaie de compiler le fichier memmap.mq5 :
Est-ce que quelqu'un peut me dire ce que je fais mal ? Et comment y remédier ?
Les sources de la bibliothèque ne répondent pas aux exigences actuelles du langage MQL5.
Existe-t-il un moyen de les corriger ? Ou est-il nécessaire de retravailler toutes les sources et il est impossible de le faire sans l'auteur ? Je pense que le compilateur n'a généré que 3 erreurs ici. Ce serait formidable si cela pouvait être corrigé.
Existe-t-il un moyen d'y remédier ? Ou bien est-il nécessaire de retravailler toutes les sources et il est impossible de le faire sans l'auteur ? Je pense que le compilateur n'a donné que 3 erreurs ici. Ce serait formidable si cela pouvait être corrigé.
Et ici, j'ai déjà corrigé le code moi-même. Ceux qui en ont besoin peuvent l'utiliser. L'Expert Advisor se compile avec succès.
J'ai ajouté ceci à partir de la ligne 251 :