Скачать MetaTrader 5

внешние переменные (extern)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Статьи помогут закрепить твои знания. Заходи и читай!
Forex Trader
114257
Forex Trader 2005.10.17 11:48 
Добрый день.
Правильно ли я понял, что объявления extern переменых отрабатывают правильно только в основном файле-модуле эксперта? Включения extern переменных в остальные файлы отрабатывают неправильно.
Как только управление передается в неосновной модуль, независимо от того, объявлен он как библиотека (property library) или нет, используются значения внешних переменных по умолчанию, а не те, которые установлены вручную в диалоге свойств эксперта в закладке пераметров. Какой смысл было тогда заводить библиотеки если они не могут правильно использовать общие глобальные параметры эксперта? Спасибо.
С уважением,
Forex Trader
114257
Forex Trader 2005.10.17 14:10  
Глобальные переменные описанные модификатором extern описывают параметры запуска экспертов и индикаторов т.е. переменные хранятся не в модуле а в контексте чарта (доступных для пользователей). Во всех остальных случаях этот модификатор игнорируется и на этапе загрузки переменные создаются как статические.

В текущей версии языка MQL4 глобальные переменные всегда статические.
Смысл библиотек такой же как и в любых других языках - набор функций.
Forex Trader
114257
Forex Trader 2005.10.17 14:42  
т.е. способа получить значения параметров эксперта из библиотек не существует?
Forex Trader
114257
Forex Trader 2005.10.17 20:12  
т.е. способа получить значения параметров эксперта из библиотек не существует?


через функции.

в эксперте:

#import "mylib.ex4"

extern int param1, param2;

int init()
{
   SetParam1(param1);
   SetParam2(param1);
   return(0);
}

int start()
{
   Print("Someproc returns ",SomeProc());
}



библиотека

int param1,param2;

void SetParam1(int value)
{
   param1=value;
}

void SetParam2(int value)
{
   param2=value;
}

int SomeProc()
{
   return(param1*param2);
}
Forex Trader
114257
Forex Trader 2005.10.18 11:09  
Спасибо за ответ. У меня так и сделано. Хотя решение не очень красивое. Если я включаю в эксперт несколько библиотек, например, обработку ошибок, отладку, установку ордеров и т.д., то я в каждой библиотеке должен инициализировать переменные. В планах нет все-таки разрешить использовать внешние переменные как они и должны быть использованы, т.е. на стадии линковщика?
MetaQuotes Software Corp.
Модератор
181212
MetaQuotes Software Corp. 2005.10.18 13:09  
К сожалению, прямой доступ к внешним переменным из других библиотек мы не будем открывать.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий