Скачать MetaTrader 5

Указатели объектов

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexander
1517
Alexander  

Еще раз повторим, что в отличие от C++, переменная hobject  из вышеприведенного примера не является указателем на память, а является дескриптором объекта.

Хотелось бы узнать можно ли таскать этот дескриптор между скриптами? Хотелось бы что-то вида

// первый скрипт
MyObject* mo1 = new MyObject();
int handle = (int)mo1;

// второй скрипт
MyObject* mo2 = handle;
Dmitry Voronkov
5851
Dmitry Voronkov  

Да вопрос очень интересный, и актуальный

MetaQuotes
Админ
25130
Renat Fatkhullin  

На текущий момент каждый модуль/библиотека загружаются в собственное адресное пространство и имеют собственные хипы памяти. То есть, объект передать во внешнюю EX5 библиотеку нельзя.


Alexander
1517
Alexander  

Отлично. Будем ждать вердикт

Спасибо! 

Slava
Модератор
6927
Slava  

Давайте определимся, что значит передавать дескрипторы объекта между скриптами. Слово "скрипт" может быть истолковано по-разному, поэтому рассмотрим варианты.

1. Скрипты - это разные MQL5-программы, которые в результате препроцессорных команд #include объединяются в один исполняемый EX5-файл. В этом случае передача дескрипторов между скриптами возможна.

2. Первый скрипт - это отдельная EX5-программа (эксперт, скрипт или пользовательский индикатор); второй скрипт - это EX5-библиотека, подключаемая к первому скрипту при помощи команды #import. В этом случае передача дескрипторов между скриптами также возможна. Так как EX5-библиотека работает в адресном пространстве подключившей её EX5-программы.

3. Первый скрипт - это отдельная EX5-программа (эксперт, скрипт или пользовательский индикатор); второй скрипт - тоже отдельная EX5-программа (эксперт, скрипт, индикатор). Передача дескрипторов между отдельными EX5-программами невозможна. И вряд ли мы откроем такую возможность в дальнейшем.

4. Первый скрипт - отдельная EX5-программа с подключённой EX5-библиотекой; второй скрипт - другая отдельная EX5-программа с подключённой той же EX5-библиотекой. Передача дескриптора между скриптами при помощи "общей" EX5-библиотеки также невозможна. Так как у каждого из скриптов собственная копия EX5-библиотеки, которые работают в разных адресных пространствах соответствующих скриптов.

5. Первый скрипт - отдельная EX5-библиотека, подключённая к EX5-программе; второй скрипт - другая отдельная EX5-библиотека, подключённая к той же EX5-программе (или подключённая к первой EX5-библиотеке). В этом случае передача дескрипторов между первой и второй библиотекой, а также между EX5-программой и любой из этих библиотек возможна. так как все они работают в одном и том же адресном пространстве. 

Dmitry Voronkov
5851
Dmitry Voronkov  
stringo:

4. Первый скрипт - отдельная EX5-программа с подключённой EX5-библиотекой; второй скрипт - другая отдельная EX5-программа с подключённой той же EX5-библиотекой. Передача дескриптора между скриптами при помощи "общей" EX5-библиотеки также невозможна. Так как у каждого из скриптов собственная копия EX5-библиотеки, которые работают в разных адресных пространствах соответствующих скриптов.

А нужен какраз 4 вариант, а значит придется через 5 вариант делать
Alexander
1517
Alexander  
stringo:

 

3. Первый скрипт - это отдельная EX5-программа (эксперт, скрипт или пользовательский индикатор); второй скрипт - тоже отдельная EX5-программа (эксперт, скрипт, индикатор). Передача дескрипторов между отдельными EX5-программами невозможна. И вряд ли мы откроем такую возможность в дальнейшем.


имел ввиду передачу между отдельными скриптами =(
John
3254
John  
Renat:

На текущий момент каждый модуль/библиотека загружаются в собственное адресное пространство и имеют собственные хипы памяти. То есть, объект передать во внешнюю EX5 библиотеку нельзя.


 

Поддерживаю - нужна четкая ИЗОЛЯЦИЯ между "екзешниками".  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий