chce odebrac tablice double wielowymiarowa, tak ze raz wysle jeden wymiar a raz 7:
jesli funkcja w dll wyglada tak:
FXDELTADLL_API void __stdcall FXfunc::CFXdeltaDLL::marchewka(std::vector<Array> &xdbl, std::vector<Real> &ydbl,double intercept){... }
to jak powinna byc zadeklarowana w MT4? (double & x[][], double & y[], double intercept); nie dziala
wyglada mi na to ze nie mozna na std::vector wysylac tablic z MT4,
na razie jedynie jesli i tu i tu mam double to dziala, a chcialbym wektor. : (
std::vector<Array> & x = MT4 ...
Wiesz co przyklad dla napisu z naglowka dla DLL (moze pomoze)
static __declspec(dllimport) int xxx,MqlStr* symbol);
EDIT: w mt4 to jest: string &MqlStr[] - czyli struktura, ktora odpowiada tej w c++
Dla większych wymiarów dodawałbym' *' w c++ i [] w mql
z std nie próbowałem, ale ja bym przyjął normalna tablice, a później przekształcił (wg. potrzeb) na coś innego.
Po co się bawić, jak i tak to zajmie (max) parę milisekund).
P.S. Wnioskując po typie string w MT4 musisz stworzyć identyczny typ, a odpowiednika std::<string> w mql nie ma. To jest moje zdanie i mogę się mylić (pewnie tak jest) - poczekaj na odpowiedz innych
Pozdrawiam
static __declspec(dllimport) int xxx,MqlStr* symbol);
EDIT: w mt4 to jest: string &MqlStr[] - czyli struktura, ktora odpowiada tej w c++
Dla większych wymiarów dodawałbym' *' w c++ i [] w mql

z std nie próbowałem, ale ja bym przyjął normalna tablice, a później przekształcił (wg. potrzeb) na coś innego.
Po co się bawić, jak i tak to zajmie (max) parę milisekund).
P.S. Wnioskując po typie string w MT4 musisz stworzyć identyczny typ, a odpowiednika std::<string> w mql nie ma. To jest moje zdanie i mogę się mylić (pewnie tak jest) - poczekaj na odpowiedz innych
Pozdrawiam
W mql4 nie istnieją obiekty takie jak w C++ , posiadające wbudowaną funkcjonalność ,więc nie możesz czegoś co nie istnieje przekazać do funkcji operującej na nich .W C++ nie jest to prosty zbiór danych .
Możesz przekazać do funkcji wskaźnik do danych (tablicę) z mql ,a w funkcji przepisać to do wektora ,lub utworzyć wektor .
Możesz przekazać do funkcji wskaźnik do danych (tablicę) z mql ,a w funkcji przepisać to do wektora ,lub utworzyć wektor .
Nie spiesz się , zawsze zdążysz stracić .
nie no to jest jasne, ale tak samo nie dam sobie glowy uciac ze double w MT4 to to samo co double w dll C++, a dziala.
jednak....
tylko w przypadku 1 dim. powertowalem i rzeczywiscie nie ma opcji w ogole przyjac czego innego jak double * tab, wskaznik do double.
rozwiazanie:
trzeba wiec tak przyjac i potem przeksztalcic sobie na co potrzebujesz. ja np musze miec wektory i to jeszcze udziwnione nieco, robie to wiec sobie jak ponizej.
jeszcze tylko uwaga: jak przyjmujesz wskaznikiem i sie przesuwasz (tab++) to w MT4 idzie w prawo, wiec jak chcesz wpisywac w kolumny jakiegos Array np, to musisz wiersze na kolumny transponowac (nazwijmy).
takie to gry i zabawy z tym sprawdzaniem ktora to kolumna, czy juz nowa itd.
utrapienie.
jednak....
tylko w przypadku 1 dim. powertowalem i rzeczywiscie nie ma opcji w ogole przyjac czego innego jak double * tab, wskaznik do double.
rozwiazanie:
trzeba wiec tak przyjac i potem przeksztalcic sobie na co potrzebujesz. ja np musze miec wektory i to jeszcze udziwnione nieco, robie to wiec sobie jak ponizej.
jeszcze tylko uwaga: jak przyjmujesz wskaznikiem i sie przesuwasz (tab++) to w MT4 idzie w prawo, wiec jak chcesz wpisywac w kolumny jakiegos Array np, to musisz wiersze na kolumny transponowac (nazwijmy).
Kod: Zaznacz cały
FXDELTADLL_API void __stdcall FXfunc::CFXdeltaDLL::marchewka(double * xdbl, double * ydbl, int xdim, int ySize, double intercept){
ostringstream s("REG:",ios::ate);
std::vector<Array> x(ySize,xdim);
std::vector<Real> y(ySize);
int n=0;
int col=0;
do{
//s<<"x:"<<*xdbl++;
col=(int)(n/ySize);
x[n-col*ySize][col]=*xdbl++;
n++;
}while(n<ySize*xdim);
n=0;
do{
y[n]=(*ydbl++);
n++;
}while(n<ySize);
std::vector<boost::function1<Real, Array> > v;
v.push_back(QuantLib::constant<QuantLib::Array,QuantLib::Real>(1.0));
for(int d=0;d<xdim;d++){
v.push_back(boost::bind(f, _1, d));
}
// itd...
utrapienie.