У меня обмен с dll происходил бы так:
void MyMA (double & inSeries[], int a, int b);
Т.е. входной параметр - он же - выходной параметр.
У меня обмен с dll происходил бы так:
void MyMA (double & inSeries[], int a, int b);
Т.е. входной параметр - он же - выходной параметр.
а как передать цену в функцию,
я хочу передать цену закрытия, kak double[]
MyMA (Close, 10,0);
а потом в самой функции в Delphi распечатываю цену для того что бы посмотреть что приходит на вход, оказывается приходит серия с нулевой длинной
Мне почему-то кажется, что массив Close нельзя использовать как массив :-)
Не идет он как double & array[].
Я бы объявил массив double array[] как переменную и копировал бы серию Close в нее
после вызова ArrayResize(array, newSize).
А получившуюся переменную передавал бы в функцию dll.
.
Возможно, профи вам подскажут, как сделать по-другому (например, ArrayCopySeries),
но я таким вариантом пользоваться не люблю - можно тупо поменять котировки в окне :-(.
Меня эта возможность очень заинтересовала, но оказалось,
что изменения можно проводить только локально -
на сервер ДЦ они после изменения не проходят :-(.
McLaud попробуй передавать массив через указатель, в качестве параметра размер массива.
В Samples на С++ так делается:
MT4_EXPFUNC double __stdcall GetArrayItemValue(const double *arr,const int arraysize,const int nitem)
{
//----
if(arr==NULL)
{
printf("GetArrayItemValue: NULL array\n");
return(0.0);
}
if(arraysize<=0)
{
printf("GetArrayItemValue: wrong arraysize (%d)\n", arraysize);
return(0.0);
}
if(nitem<0 || nitem>=arraysize)
{
printf("GetArrayItemValue: wrong item number (%d)\n", nitem);
return(0.0);
}
//----
return(arr[nitem]);
}
То есть тут массив передается через указатель arr, в arraysize передается его размер, а nitem-номер элемента значение которого возвращает функция.
А коде на MQL4 прототип функции выглядит так:
double GetArrayItemValue(double arr[],int,int);
Пример использования:
double arr[5]={1.5, 2.6, 3.7, 4.8, 5.9 };
//---- get first item from passed array
price=GetArrayItemValue(arr,5,0)
Это я вытащил из папки \experts\Samples\
Luptator:
McLaud хотел сделать следующее:
1. вернуть массив даблов
делается это через входной параметр, так:
void MyMA (double & inSeries[], int a, int b);
(см. мой пост №1 в этой ветке)
2. передать цену закрытия, причем как Close.
Как Close передать цену закрытия нельзя.
нужно массив аллоцировать новый.
и в него копировать цены закрытия
(см. мой пост № 2 в этой ветке)
3. пишет он на Delphi, причем,
судя по тому, что он распечатывал значения, переданные в dll,
связка mql - dll у него работает. Т.е. пример на С++ ему не в тему.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
есть необходимость импортировать из DLL написанной на Delphi функцию, которая возращает массив из double.
library myMADLL
type
function MyMA (const SrcA: TSeries; ALength, APhase: Integer): TSeries; stdcall;TSeries = array of Double;
export MyMA;
в индикаторе:
#import "myMADLL.dll"
double[] MyMA (double inSeries[], int a, int b);
MетаЕдитор ругается на первое обьявление double[]
Как быть?