Проекты mqproj

 

Здравствуйте все )

Вот, стало интересно, знает ли кто-то кроме меня, об одной интересной особенности проектов

Пишем код

#include <ProjectTestInc.mqh>

class CGlobal
{
   public:
      string func()
      {
         return "";
      }
};

CGlobal gVariable;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
  }

пишем библиотеку ProjectTestInc.mqh

void myFunc()
{
   gVariable.func();
}

компилируем библиотеку, получаем ошибку

'gVariable' - undeclared identifier ProjectTestInc.mqh 4 4

Теперь оборачиваем код в проект. Заходим в ProjectTestInc.mqh из проекта и, о чудо! Теперь глобальная переменная видна )

 

 
Nikolai Karetnikov:

компилируем библиотеку, получаем ошибку

#include не библиотеки, а подключаемые файлы


сложно предположить где нужен такой хук ? 


на всякий случай с форвард описанием - пользуюсь, считаю, что иногда удобно:

#include  <ProjectTestInc.mqh>
class CGlobal
{
   public:
      static string func()
      {
         return "OK";
      }
};
//+------------------------------------------------------------------+
void OnInit()
{
   myFunc();
}
//+------------------------------------------------------------------+
void OnDeinit( const int Reason )
{
}
//+------------------------------------------------------------------+
void OnTick()
{
  
}

ProjectTestInc.mqh

class CGlobal;
void myFunc()
{
   Print(CGlobal::func());
}
 

Спасибо за идею с форвардом! )

>> Cложно предположить где нужен такой хук ? 

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

Вообще, в справке об этом напрямую ни слова, лишь одно предложение, вроде "в секции Dependencies проекта собраны все подключаемые файлы".

Выходит, что возможность из серии недокументированных, а значит полагаться на подобный "хук", как вы говорите, можно лишь на свой страх и риск. 

 
Nikolai Karetnikov:

Спасибо за идею с форвардом! )

>> Cложно предположить где нужен такой хук ? 

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

Вообще, в справке об этом напрямую ни слова, лишь одно предложение, вроде "в секции Dependencies проекта собраны все подключаемые файлы".

Выходит, что возможность из серии недокументированных, а значит полагаться на подобный "хук", как вы говорите, можно лишь на свой страх и риск. 

А лучше так никогда не делать. Меньше проблем себе создадите.

Подключаемый файл не должен знать о переменных, объявленных в других файлах.

 
Koldun Zloy:

А лучше так никогда не делать. Меньше проблем себе создадите.

Подключаемый файл не должен знать о переменных, объявленных в других файлах.

Как раз, за исключением проекта. Там, зачастую, удобнее глобальные переменные в отдельный файл выделить.