std::vector<Array> & x = MT4 ...

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
cf16
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 27 sty 2012, 18:43

std::vector<Array> & x = MT4 ...

Nieprzeczytany post autor: cf16 »

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. : (

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

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

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

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 .
Nie spiesz się , zawsze zdążysz stracić .

Awatar użytkownika
cf16
Stały bywalec
Stały bywalec
Posty: 33
Rejestracja: 27 sty 2012, 18:43

Nieprzeczytany post autor: cf16 »

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).

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...
takie to gry i zabawy z tym sprawdzaniem ktora to kolumna, czy juz nowa itd.
utrapienie.

ODPOWIEDZ