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

 

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

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

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

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

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

 

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


 

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

Спасибо! 

 

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

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-программой и любой из этих библиотек возможна. так как все они работают в одном и том же адресном пространстве. 

 
stringo:

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

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

 

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


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

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


 

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