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
L'auteur de l'article est très reconnaissant pour une présentation aussi accessible des informations sur l'interopérabilité IPC sans dll de vélo.
Travailler avec la mémoire me semble assez compliqué, mais l'approche est claire, à l'exception de quelques questions, j'espère que des personnes bien informées aideront à comprendre :
1. Avec l'aide de memcpy, nous copions une variable de deux octets, short, dans le tableau uchar[2], comment l'information est-elle placée dans le tableau lui-même ?
Quel sera le format des valeurs à l'index 0 et 1 du tableau uchar ?
La valeur est divisée par octet par octet et écrite dans le tableau, ok ... Je pense que j'ai compris.
Je n'arrive pas à comprendre quelles valeurs tombent dans ce tableau et comment en obtenir la valeur originale, la question n'est pas que je ne puisse pas afficher ces valeurs à l'écran.
2. Comment remplir correctement le tableau uchar[4] avec des valeurs de différents types lors de la copie memcpy, par exemple :
On a l'impression que la réponse est triviale et que tout se fait simplement, mais comment l'écrire correctement ?
Avez-vous essayéPrint?
Le quatrième exemple donne l'erreur suivante : 'operator=' - illegal operation use SAMPLE_04.mq4 34 7
#property copyright ""
#property link ""
#property version ""
#property strict
//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
double d; // 8 байт
long l; // 8 байт
int i[3]; // 3 * 4 = 12 байт
};
//---
struct str2
{
uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
str1 src; //
src.d = -1; //
src.l = 20; //
//--- заполняем параметры структуры
ArrayInitialize(src.i, 0);
str2 dst; //
//--- превратили структуру в байтовый массив
dst = src; // <----- Ошибка
}
Je comprends l'idée de la section mémoire, mais peut-être que les définitions ne sont pas tout à fait correctes ?
Pouvez-vous me dire quelle en est la raison ?
Merci d'avance.L'idée d'un emplacement mémoire est claire, mais il y a peut-être quelque chose qui cloche dans les définitions ?
Quelle en est la raison ?
Les structures de types différents ne peuvent plus être copiées, MQL a supprimé cette possibilité.
utiliser union
uchar n'est pas correct d'ailleurs, et double est présent là aussi, de manière suspecte.
Et d'ailleurs src devrait spécifier ce qui lui appartient exactement et sera transmis.
Quelqu'un vous a déjà corrigé comme vous l'avez suggéré. C'est bien. Pensez-y. Bonne chance.
Est-ce que cela fonctionnera pour mql4 aujourd'hui ?
Les langages (MQL4 / MQL5) sont complètement les mêmes aujourd'hui - la différence réside dans 2-3 fonctions manquantes dans MQL4(ArrayPrint et quelque chose d'autre de petit) et dans les "nouvelles fonctionnalités" de MQL5 - base de données, DirectX et OpenCL.
Mais l'article a été écrit il y a 8 ans, maintenant MQL est devenu un langage strictement typé, et pour assigner 2 structures (exemple dans l'article) vous devez écrire un constructeur de copie ou sérialiser la structure en un tableau d'octets et vice-versa.
L'affectation de structures de types différents ne fonctionne plus(la conversion deparamètres n'est pas autorisée - une variable du même type est attendue).
Mais il serait possible de travailler avec des unions :