простая DLL – все что нужно

 
Уважаемые форумчане, доброго времени суток и больших прибылей во-первых :)
А во-вторых хочу попросить Вашей помощи - я просмотрел все темы этого форума плюс форумы www.MQL4.com , конечно встречаются множество упоминаний о dll, но это как правило либо разговор профессионалов о конкретных моментах, либо описание dll как хранилища каких-то функций, к которым обращается только сам эксперт.
Так вот не могли бы Вы доступно объяснить мне и всем кого интересует эта тема:
как должен выглядеть самый что ни на есть простой DLL, который имеет 1 общее значение переменной (скажем double) и с экспертом и с внешней программой (желательно для C++ Builder), иными словами DLL реализующий связь эксперта с внешним миром.
Ведь в большинстве случаев начинающим нужна именно основа, которую потом самостоятельно можно изучать и дополнять, а именно:
- код эксперта в части описания и использования переменных DLL;
- код самой DLL (например на С++);
- код подключения и использования DLL непосредственно во внешней программе (желательно также на С++);

Необязательно описывать конкретные рабочие примеры (хотя это и не помешает), достаточно будет показать передачу значения переменной из внешней программы -> через DLL -> в эксперт и обратно.
Вот и все что нужно !
Полагаю, если Вы поможете осветить этот вопрос, то не я один буду Вам благодарен, кроме того на форуме явно есть профессиональные программисты для это не составит особого труда.
Заранее спасибо.
 
Посмотрите в составе терминала полный пример DLL проекта на Visual C++ 6.0:
\MetaTrader 4\experts\samples\DLLSample\
 
MetaQuotes Software Corp.:
Посмотрите в составе терминала полный пример DLL проекта на Visual C++ 6.0:
\MetaTrader 4\experts\samples\DLLSample\

а где сейчас лежит такой пример?

 

КАК ЗА 10 МИНУТ НАПИСАТЬ DLL БИБЛИОТЕКУ ДЛЯ MQL5 И ОБМЕНИВАТЬСЯ ДАННЫМИ?

А вот обмен данных с другой программой чисто средствами DLL не решается.

 

В DLL можно задавать разделяемые разделы для переменных, будут доступны из любых программ

#pragma data_seg("Shared")

double _Bid = 1.12345; // обязательно надо инициализировать

int Ticket = 123456;

#pragma data_seg() // конец раздела

#pragma comment(lincer, "/SECTION:Shared, RWS") // указываем линкеру включить раздел в DLL

---------------

Взято из Джеффри Рихтер "Windows для профессионалов", есть в инете

И второй способ, обмениваться через Memory Mapped Files

https://www.mql5.com/ru/code/818

https://www.mql5.com/ru/code/816

https://www.mql5.com/ru/code/817

File Mapping без DLL
File Mapping без DLL
  • голосов: 34
  • 2012.01.16
  • o_o
  • www.mql5.com
Полностью портированный класс из C++ (Memory Mapping)  в  MQL5. В комплекте находится скрипт с примером использования. PS. Особая благодарность Ренату и Николаю, которые заставили задуматься над данной возможностью. По...
 
MetaQuotes Software Corp.:
Посмотрите в составе терминала полный пример DLL проекта на Visual C++ 6.0:
\MetaTrader 4\experts\samples\DLLSample\

Он теперь тут лежит

\MQL4\Scripts\Examples\DLL\

 
Alexey Volchanskiy:

В DLL можно задавать разделяемые разделы для переменных, будут доступны из любых программ

"Не грузи, да не загрузим будешь." ((С) М. Задорнов)

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

Этот хитрый трюк не для повседневного использования, и не для начинающих.

 
Koldun Zloy:

"Не грузи, да не загрузим будешь." ((С) М. Задорнов)

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

Этот хитрый трюк не для повседневного использования, и не для начинающих.

Блин, о чем вы вообще? В ДЛЛ делаем такой раздел, туда кладем переменные. Далее эту ДЛЛ может грузить, кто хочет. Рихтера почитайте, фантазий поубавится.

И чем трюк хитер? Я привел полный код, всего несколько строчек.

 
Alexey Volchanskiy:

Блин, о чем вы вообще? В ДЛЛ делаем такой раздел, туда кладем переменные. Далее эту ДЛЛ может грузить, кто хочет. Рихтера почитайте, фантазий поубавится.

И чем трюк хитер? Я привел полный код, всего несколько строчек.

Держите себя в руках.

Это Вы невнимательно читаете Рихтера.

Для того чтобы переменная была доступна из других программ достаточно написать так:

extern "C" __declspec(dllexport) int Ticket = 123456;
 
Koldun Zloy:

Держите себя в руках.

Это Вы невнимательно читаете Рихтера.

Для того чтобы переменная была доступна из других программ достаточно написать так:

Будет создана копия для каждой из программ, которые грузят ДЛЛ.

 
Forex Trader:
Уважаемые форумчане, доброго времени суток и больших прибылей во-первых :)
А во-вторых хочу попросить Вашей помощи - я просмотрел все темы этого форума плюс форумы www.MQL4.com , конечно встречаются множество упоминаний о dll, но это как правило либо разговор профессионалов о конкретных моментах, либо описание dll как хранилища каких-то функций, к которым обращается только сам эксперт.
Так вот не могли бы Вы доступно объяснить мне и всем кого интересует эта тема:
как должен выглядеть самый что ни на есть простой DLL, который имеет 1 общее значение переменной (скажем double) и с экспертом и с внешней программой (желательно для C++ Builder), иными словами DLL реализующий связь эксперта с внешним миром.
Ведь в большинстве случаев начинающим нужна именно основа, которую потом самостоятельно можно изучать и дополнять, а именно:
- код эксперта в части описания и использования переменных DLL;
- код самой DLL (например на С++);
- код подключения и использования DLL непосредственно во внешней программе (желательно также на С++);

Необязательно описывать конкретные рабочие примеры (хотя это и не помешает), достаточно будет показать передачу значения переменной из внешней программы -> через DLL -> в эксперт и обратно.
Вот и все что нужно !
Полагаю, если Вы поможете осветить этот вопрос, то не я один буду Вам благодарен, кроме того на форуме явно есть профессиональные программисты для это не составит особого труда.
Заранее спасибо.

вот здесь, все что вам надо и даже больше, предоставляются абсолютно все исходники:

https://www.mql5.com/ru/articles/1361

Советник MetaTrader 4 обменивается информацией с внешним миром
Советник MetaTrader 4 обменивается информацией с внешним миром
  • 2013.01.22
  • Sergey Sartakov
  • www.mql5.com
Разработан программный инструмент, который обеспечивает советника MetaTrader 4 средствами создания как сервера, так и клиентов. Клиенты могут устанавливать соединения как с собственными серверами, так и с серверами любых других типов, обеспечивающих соединения типа точка-точка. Предлагаемый программный инструмент состоит из двух компонент...
Причина обращения: