#property library блокирует внешние параметры

 

1. Пишу библиотеку:

//+-----------------------------------------------------------------+
//|                                                     b-Test.mqh  |
//|                                         Ким Игорь В. aka KimIV  |
//|                                            http://www.kimiv.ru  |
//+-----------------------------------------------------------------+
#property library
 
int fTest(int x) {
  return(x*x);
}

2. Помещаю её в папку ..expertsinclude

3. Пишу скрипт:

//+-----------------------------------------------------------------+
//|                                                       Test.mq4  |
//|                                         Ким Игорь В. aka KimIV  |
//|                                            http://www.kimiv.ru  |
//+-----------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property show_inputs
 
extern int par = 4;
 
#include <b-Test.mqh>
 
void start() {
  Print(fTest(par));
}

4. Компилирую и пытаюсь исполнить:

5. Внешних параметров НЕТ

6. Из библиотеки убираю строку:

#property library

7. Компилирую скрипт и запускаю:

8. Внешние параметры ЕСТЬ.

Прошу разработчиков прокомментировать, как правильно пользоваться инструкцией:

#property library

чтобы внешние параметры скрипта не блокировались.

Благодарю!

 

Я попробовал сделать следующим образом:

1. У предыдущей библиотеки b-Test.mq4 поменял расширение с MQH на MQ4:

//+-----------------------------------------------------------------+
//|                                                     b-Test.mq4  |
//|                                         Ким Игорь В. aka KimIV  |
//|                                            http://www.kimiv.ru  |
//+-----------------------------------------------------------------+
#property library
 
int fTest(int x) {
  return(x*x);
}

2. И поместил её в папку ..\experts\libraries\

3. Компилировал библиотеку b-Test.mq4 отдельно, чтобы создался файл b-Test.ex4

4. В скрипте Test.mq4 использовал инструкцию #import:

//+-----------------------------------------------------------------+
//|                                                       Test.mq4  |
//|                                         Ким Игорь В. aka KimIV  |
//|                                            http://www.kimiv.ru  |
//+-----------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property show_inputs
 
extern int par = 4;
 
#import "b-Test.ex4"
  int fTest(int x);
 
void start() {
  Print(fTest(par));
}

5. Теперь при вызове скрипта у него можно изменить внешний параметр par.

Вывод. В инклудниках инструкция #property library не катит.

Уважаемые разработчики, прокомментируйте, пожалуйста, мой вывод на предмет правильности, корректности и пр.

 
У меня была похожая проблемма, однако, она исчезла также как и появилась. Только я использовал не библиотеки, а инклюдники. В инклюдниках я ничего типа #property library не писал, #property show_inputs эта конструкция тоже не помогала, перезагрузил терминал.. компьютер. . и все заработало...
 
KimIV:

Вывод. В инклудниках инструкция #property library не катит.

Уважаемые разработчики, прокомментируйте, пожалуйста, мой вывод на предмет правильности, корректности и пр.

Да, #property library нужны только для успешной и независимой компиляции библиотек в *.EX4 файлы чтобы компилятор не выбрасывал неиспользуемые функции. Если же библиотека включается в виде исходника, то ставить #property library не надо ставить.
 
Renat писал (а):
Если же библиотека включается в виде исходника, то ставить #property library не надо ставить.
Благодарю!