массив arr не берет значения массива Buffer1 где ошибка?
с индикатора
#property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 clrBlue int Shift=24; double Buffer1[]; double Buffer2[]; double Buffer3[]; double Buffer4[]; double Buffer5[]; #import "MyDll.dll" double functionW1(double &Buffer1 ); #import int init() { SetIndexShift(0,Shift); SetIndexStyle(0,DRAW_NONE); SetIndexBuffer(0,Buffer1); SetIndexBuffer(1,Buffer2); SetIndexBuffer(2,Buffer3); SetIndexBuffer(3,Buffer4); SetIndexBuffer(4,Buffer5); return(0); } int start() { double arr[121]; for (int k=1;k<=121;k++) { Alert(functionW1(arr[k])," k= ",k); } for(int j1=1; j1<=121; j1++) { Buffer1[j1]=iClose(NULL,PERIOD_H1,j1*16-15); Buffer2[j1]=iClose(NULL,PERIOD_H1,j1*8-7); Buffer3[j1]=iClose(NULL,PERIOD_H1,j1*4-3); Buffer4[j1]=iClose(NULL,PERIOD_H1,2*j1-1); Buffer5[j1]=iClose(NULL,PERIOD_H1,j1); } return(0); }
Может вместо * надо &
?
#import "MyDll.dll" double functionW1(double &Buffer1[]); #import
и при вызове
functionW1(arr);
И не забыть пихнуть данные в arr перед вызовом functionW1.
Здравствуйте. Пишу dll. Хочу пока отправить из мт4 одномерный массив получить в с++ преобразовать и обратно отправить в мт4. Пишу так на MQL4
где ошибка?
1. Попробуйте
#import "MyDll.dll" double functionW1(double &Buffer[] ); #import
2. Обратите внимание
На с++ так#define WIN32_LEAN_AND_MEAN
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#define MT4_EXPFUNC __declspec(dllexport)
#pragma pack(push,1)
#pragma pack(pop)
MT4_EXPFUNC double __stdcall functionW1( double *Buffer1)
{
double arr[121];
for (int i=0; i<=120;i=i+1)
{
arr[i]=Buffer1[i]+0.1;
}
return (*arr);
}
На что следует обратить внимание:
1. Где (в какой области памяти) будет размещен массив double arr[121];
2. Что произойдет с этой областью при завершении работы функции MT4_EXPFUNC double __stdcall functionW1( double *Buffer1)
2. Куда будет указывать *arr после завершения работы функции MT4_EXPFUNC double __stdcall functionW1( double *Buffer1) - то есть, в тот момент, когда Вы его получите в МКЛ4
И еще, ИМХО, не стоит возвращать указатели на память, размещенную в ДЛЛ, даже если это делать правильно - с учетом области видимости. Разместите память в МКЛ, передайте в ДЛЛ ссылку, заполните там и потом работайте в МКЛ
...не стоит возвращать указатели на память, размещенную в ДЛЛ, даже если Вы это делать правильно ...
Поправил, прикольно получилось )))))))))
и при вызове
И не забыть пихнуть данные в arr перед вызовом functionW1.
1. Попробуйте
2. Обратите внимание
На что следует обратить внимание:
1. Где (в какой области памяти) будет размещен массив double arr[121];
2. Что произойдет с этой областью при завершении работы функции MT4_EXPFUNC double __stdcall functionW1( double *Buffer1)
2. Куда будет указывать *arr после завершения работы функции MT4_EXPFUNC double __stdcall functionW1( double *Buffer1) - то есть, в тот момент, когда Вы его получите в МКЛ4
И еще, ИМХО, не стоит возвращать указатели на память, размещенную в ДЛЛ, даже если это делать правильно - с учетом области видимости. Разместите память в МКЛ, передайте в ДЛЛ ссылку, заполните там и потом работайте в МКЛ

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Пишу dll. Хочу пока отправить из мт4 одномерный массив получить в с++ преобразовать и обратно отправить в мт4. Пишу так на MQL4