Обсуждение статьи "Избавляемся от балласта самодельных DLL" - страница 2

 

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; //   <----- Ошибка

}


Сама идея про участок памяти понятна, может в определениях где то не всё ровненько?

Подскажите в чём причина?

Заранее спасибо. 
 
_SERG_:

Сама идея про участок памяти понятна, может в определениях где то не всё ровненько?

Подскажите в чём причина?

структуры разных типов уже нельзя копировать, язык MQL возможность убрал

пользуйтесь union

//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
  double d; // 8 байт
  long   l; // 8 байт
  int i[3]; // 3 * 4 = 12 байт
};

//---
struct str2
{
  uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};

union str12 { str1 s1; str2 s2; };

//------------------------------------------------------------------
void OnStart()
{
  str12 src;
  src.s1.d = -1; // 
  src.s1.l = 20; //
  ArrayInitialize(src.s1.i, 0); 

  // src.s2 - байтовый массив от s1
}
 
_SERG_:


uchar по ходу неправильно,  и там double присутствует тоже подозрительно.

И по ходу src надо указать что именно ей принадлежит и будет передаваться.

Вам уже кто-то подправил так же как и предположил. Хорошо. Думайте. Удачи.

 
а для mql4 будет работать на сегодняшний день?
 
Seric29:
а для mql4 будет работать на сегодняшний день?

языки (MQL4 / MQL5)  сейчас полностью одинаковы - отличие в 2-3  функциях отсутствующих в MQL4 (ArrayPrint и что то еще по мелочи) и в "новых плюшках" для MQL5 - БД, DirectX и OpenCL


но статья написана 8 лет назад, сейчас MQL стал строго типизированным языком, и чтобы присвоить 2 структуры (пример в статье) нужно писать самостоятельно конструктор копирования или сериализовать структуру в массив байт и затем обратно

 
Интересно, можно ли получить реальный указатель на функцию. Указатели, полученные с помощью typedef, отлично работают внутри mql программы. Но к сожалению передать в dll мне их не удалось.
 
Dmitri Custurov #:
Интересно, можно ли получить реальный указатель на функцию. Указатели, полученные с помощью typedef, отлично работают внутри mql программы. Но к сожалению передать в dll мне их не удалось.

Если с++ + встроенный ассемблер можешь и в курсе что и как в стек кладется, а термины дальний и ближний вызов понятны, то можешь попробовать. Гарантию, что получится не дам, но по идее можно.

Причина обращения: