Скачать MetaTrader 5

Импорт bool по ссылке во внешюю ф-цию, проблема.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нашел интересную программу? Опубликуй ее в CodeBase - миллионы трейдеров оценят это!
Forex Trader
114255
Forex Trader 2007.12.07 22:57 
Что-то я тут запутался, помогите, плиз, разобраться.
Дано: скрипт в котором определена внешняя ф-ция
#import "TestOpenSignal.ex4"
 void SelectSignal(int,int, bool& s1, bool& s2);
#import  ""


(кстати, про пустые кавычки в рук-ве ничего не нашел, даже примеры без них, а компилятор требует)
bool-переменные соответственно по ссылке.
Вызывается данная ф-ция из внутренних ф-ций скрипта, например вот так:

SelectSignal(Порядковый_Номер_Сигнала,bar,null, result);


переменная result ессно - bool.
Внутри "TestOpenSignal.ex4" ф-ция определена так:

void SelectSignal(int SignalNumber, int pos, bool& slong ,bool& sshort)
{
  slong=true;
  return(0);
}


И вся эта связка почему-то ;о) не работает, несмотря на явное указание сделать slong=true, в основной скрипт ничего не передается.
P.S. IsLibrariesAllowed()=true

Forex Trader
114255
Forex Trader 2007.12.10 13:30  
Существует ограничение. Параметр по ссылке в mql4-функцию может быть передан только в пределах одного модуля.
Написано здесь: "MQL4: Формальные параметры"
Forex Trader
114255
Forex Trader 2007.12.10 22:21  
Правильно ли я Вас понял, что по ссылке В ПРИНИЦИПЕ невозможно передать переменные в ф-цию, находящуюся в другом модуле?
Но тогда как быть с описанным здесь:
"MQL4: Описание внешних функций"
"Существует способ передавать в импортируемые dll-функции указатели на переменные. Данные типа string передаются как указатель на соответствующую область памяти (напомним, что внутреннее представление строковых данных состоит из двух частей: длины области памяти и указателя на область памяти). Если необходимо передать данные типа int или double, то в качестве параметра следует передать по ссылке одноэлементный массив соответствующего типа."
Forex Trader
114255
Forex Trader 2007.12.11 11:01  
Ещё раз: Параметр по ссылке в mql4-функцию может быть передан только в пределах одного модуля.

Для dll можно обойти это ограничение. Входным параметром описать массив по ссылке нужного типа и передавать хотя бы одноэлементный массив. Вы правильно нашли описание https://docs.mql4.com/ru/basis/variables/extfunctions. Это - действительно обходное решение, так как передаётся массив, а не ссылка на переменную

На форуме (на русском и на английском, а также на www.mql4.com) можно найти примеры
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий