
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Автору статьи большая благодарность за столь доступное представление информации о возможностях взаимодействия IPC без велосипедных dll.
Работа с памятью мне кажется достаточно сложной, но подход понятен, за исключением некоторых вопросов, надеюсь знающие люди помогут разобраться:
1. При помощи memcpy копируем в массив uchar[2] двухбайтовую переменную short, как информация ложится в сам массив?
В каком формате будут находиться значения по индексу 0 и 1 массива uchar?
Значение разбивается побайтно и пишется в массив, ок ... Тут вроде понятно.
Не могу понять какие значения попадают в этот массив и как из них получить исходное, вопрос не стоит в том, что я не могу вывести эти значения на экран.
2. Как правильно заполнить массив uchar[4] значениями разных типов при копировании memcpy, например:
Чувствуется что ответ тривиален и все делается просто, но как это правильно записать ?
Print не пробовали?
Четвёртый пример ошибку выдаёт : '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; // <----- Ошибка
}
Сама идея про участок памяти понятна, может в определениях где то не всё ровненько?
Подскажите в чём причина?
Заранее спасибо.Сама идея про участок памяти понятна, может в определениях где то не всё ровненько?
Подскажите в чём причина?
структуры разных типов уже нельзя копировать, язык MQL возможность убрал
пользуйтесь union
uchar по ходу неправильно, и там double присутствует тоже подозрительно.
И по ходу src надо указать что именно ей принадлежит и будет передаваться.
Вам уже кто-то подправил так же как и предположил. Хорошо. Думайте. Удачи.
а для mql4 будет работать на сегодняшний день?
языки (MQL4 / MQL5) сейчас полностью одинаковы - отличие в 2-3 функциях отсутствующих в MQL4 (ArrayPrint и что то еще по мелочи) и в "новых плюшках" для MQL5 - БД, DirectX и OpenCL
но статья написана 8 лет назад, сейчас MQL стал строго типизированным языком, и чтобы присвоить 2 структуры (пример в статье) нужно писать самостоятельно конструктор копирования или сериализовать структуру в массив байт и затем обратно
Присвоение структур разных типов больше не работает( преобразованиепараметров не разрешено - ожидается переменная того же типа).
Но можно было бы работать с союзами: