Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поиск в документации доступен через MetaTrader 5. Ищи и изучай!
Alexander
1512
Alexander 2010.01.26 20:19 

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

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

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

// второй скрипт
MyObject* mo2 = handle;
Dmitry Voronkov
5761
Dmitry Voronkov 2010.01.26 20:55  

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

MetaQuotes
Админ
24944
Renat Fatkhullin 2010.01.26 21:36  

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


Alexander
1512
Alexander 2010.01.26 21:40  

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

Спасибо! 

Slawa
Модератор
6839
Slawa 2010.01.27 14:54  

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

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
5761
Dmitry Voronkov 2010.01.27 15:05  
stringo:

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

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

 

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


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

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


 

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

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