[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 291

 
alsu >>:

вы путаете понятие "библиотека" (из которой функции добываются с помощью #import) и "включаемый заголовочный файл" (#include).


Библиотеки лежат в папке libraries, их исходники имеют расширение *.mq4, как у индикаторов и экспертов, компилируются они в файл *.ex4 (из которого и импортируются потом готовые функции в другие программы вот так -

Для того, чтобы библиотека компилировалась корректно, как правило, необходимо вначале прописать директиву #property library.

Включаемые заголовочные файлы служат для включения в различные программы готовых кусков кода, они лежат в папке includes, имеют расширение *.mqh, включаются в текст (именно в текст) программы директивой #include <...>, компилировать их отдельно не нужно, т.к. они компилятся вместе с основной программой.

Кстати раньше библиотека генерилась по шаблону уже с #property library, а щас нет ктото знает почему изменили шаблон или просто забыли включить?

PS еслиб не alsu так бы и не понял о чём спрашающий хочет узнать, старею.

 
Urain >>:

Кстати раньше библиотека генерилась по шаблону уже с #property library, а щас нет ктото знает почему изменили шаблон или просто забыли включить?

PS еслиб не alsu так бы и не понял о чём спрашающий хочет узнать, старею.

можно вручную шаблон подправить:)

 
alsu >>:

можно вручную шаблон подправить:)

Да да я знаю но в своё время убил на поиск ошибки 2 дня, а делов то в новом билде другой шаблон.

 
Urain >>:

..еслиб не alsu так бы и не понял о чём спрашающий хочет узнать, старею.

Опытные старики, посмотрите на код библиотеки "спрашивающего" и объясните мне, что автор имел в виду, когда его писал?

 

Извините.

Написали очень много но ответ на поставленный вопрос я так и не понял. Постараюсь еще раз объяснить, что у меня не получается.

Допустим я сделал советник в который вставил директиву #include<...>, затем сделал включаемый заголовочный файл с куском кода.

Откомпилировал советник и включил в торговлю. Все работает. Исходя из цитаты Сергея Ковалёв а:

"...Ещё можно добавить, что файл ех4 является самодостаточным - для того, чтоб он работал,
не требуется, чтоб в include находились исходные коды пользовательских функций.
Файл ех4 можно скопировать, передать другим трейдерам и там использовать.

Он является полноценным независимо от технологии его получения."

Беру свой советник копирую и переношу на другой компьютер, другому трейдеру . После этого советник не хочет работать и пишет, что нет функции к которой обращаетс я #include<...>, то есть он не видит включаемый заголовочный файл и не компилируется.

Вот пример советника и включаемого заголовочного файла. Посмотрите в чем ошибка именно по вопросу.

//+------------------------------------------------------------------+
//| Киблиот.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

#include <PointZigZag.mqh>

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{PointZigZag();
Comment("Прод.-y21 = ",y21," ","Пок.-x21 = ",x21);
return(0);
}

//+------------------------------------------------------------------+

жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж

//+------------------------------------------------------------------+
//| PointZigZag.mqh |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern int ExtDepth = 12; //------- переменные ZigZag
extern int ExtDeviation = 5; //------- переменные ZigZag
extern int ExtBackstep = 3; //------- переменные ZigZag
extern int ShiftBars = 2; //------- переменные ZigZag
//------- переменные ZigZag ------------------------------------------
double y3, y2, y1, zz;//
int x3, x2, x1, sh;//
double x31, x21, x11; // Точки перегиба ZigZag
double y31, y21, y11; // Точки перегиба ZigZag
double TimeZZ, TimeOO;
//------------------------------------------------------------------------------

double PointZigZag()
{y3=0;y2=0;y1=0;
sh=ShiftBars;
while (y3==0)
{zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
if (zz!=0 && zz!=EMPTY_VALUE)
{if (y1==0) { x1=sh; y1=zz; }
else if (y2==0) { x2=sh; y2=zz; }
else if (y3==0) { x3=sh; y3=zz; }}sh++;
}
if (High[x1]>High[x2])
{x11=High[x1]; x21=Low[x2]; x31=High[x3];
y11=0;y21=0;y31=0;TimeZZ=Time[x2];
}else
{y11=Low[x1]; y21=High[x2]; y31=Low[x3];
x11=0;x21=0;x31=0;TimeZZ=Time[x2];}

}

//+------------------------------------------------------------------+
 
приведите пожалуйста в неизменном виде строку об ошибке, которую выдает компилятор
 
gvi2504 >>:

Извините.

Написали очень много но ответ на поставленный вопрос я так и не понял. Постараюсь еще раз объяснить, что у меня не получается.

Допустим я сделал советник в который вставил директиву #include<...>, затем сделал включаемый заголовочный файл с куском кода.

Откомпилировал советник и включил в торговлю. Все работает. Исходя из цитаты Сергея Ковалёв а:

"...Ещё можно добавить, что файл ех4 является самодостаточным - для того, чтоб он работал,
не требуется, чтоб в include находились исходные коды пользовательских функций.
Файл ех4 можно скопировать, передать другим трейдерам и там использовать.

Он является полноценным независимо от технологии его получения."

Беру свой советник копирую и переношу на другой компьютер, другому трейдеру . После этого советник не хочет работать и пишет, что нет функции к которой обращаетс я #include<...>, то есть он не видит включаемый заголовочный файл и не компилируется.

Вот пример советника и включаемого заголовочного файла. Посмотрите в чем ошибка именно по вопросу.


Естевственно по такой дериктиве включаемый файл должен лежать также и на другом компе в директории include, и вообще не парьте себе мозги пишите всё на одном листе выделии кусок кода в виде функции загнали его в конец листа чтоб под ногами не болтался и все дела никаких влючений выключений чё вы себе жизнь усложняете. Директивы #include и #import нужны (имхо) для написания програмного комплеса с количеством строк за 1000 и состоящего из нескольких десятков отдельных программ, иначе от них больше путаницы чем пользы.

 
alsu >>:
приведите пожалуйста в неизменном виде строку об ошибке, которую выдает компилятор

Компилятор пишет следующею строку

'PointZigZag.mqh' - cannot open the program file D:\Program Files\MetaTrader2\experts\Киблиот.mq4 (10, 1)

 
gvi2504 >>:

Компилятор пишет следующею строку

'PointZigZag.mqh' - cannot open the program file D:\Program Files\MetaTrader2\experts\Киблиот.mq4 (10, 1)

смотрите ответ выше - надо положить включаемый файл PointZigZag.mqh в папку include

 
alsu >>:

смотрите ответ выше - надо положить включаемый файл PointZigZag.mqh в папку include

Причём на всех компьютерах где предполагается компилирование файла Киблиот.mq4.

Причина обращения: