kod EA w kilku plikach

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

kod EA w kilku plikach

Nieprzeczytany post autor: xpep »

Witam

mam nastepujacy problem, ilosc funkcji w moim EA jest jest tak duza ze nie ogarniam :D czy mozna jakos powrzucac te funkcjie do osobnych plikow i zeby bylo wygodniej wprowadzac w nich zmiany? kombinuje z include ale cos mi to nie idzie :?

pozdro

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

sa jeszcze biblioteki

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

dokładnie biblioteki (i include)
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

LowcaG pisze:sa jeszcze biblioteki
ok wiec trzeba napisac funkcje w bibliotece .mq4 i do biblioteki naglowek z deklaracja funkcji, nastepnie include<naglowek> daje w pliku glowny.

jesli uzywam zmienne globalne w glownym pliku ktore ustawiane sa przez funkcje w bibliotece to w bibliotekach je mam zadeklarowac przez extern tak?

poprawcie jesli sie myle :D

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

xpep pisze:jesli uzywam zmienne globalne w glownym pliku ktore ustawiane sa przez funkcje w bibliotece to w bibliotekach je mam zadeklarowac przez extern tak?
Tego nie wiem, ale chyba czytelniej będzie wywoływać funkcję i jej wynik przypisywać do zmiennej globalnej? Albo zmienna globalna ma być w bibliotece bo się zacznie wszystko mieszać co gdzie jest itd.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

Tig3r pisze:Tego nie wiem, ale chyba czytelniej będzie wywoływać funkcję i jej wynik przypisywać do zmiennej globalnej? Albo zmienna globalna ma być w bibliotece bo się zacznie wszystko mieszać co gdzie jest itd.
zmienne globalne sa w glownej funkcji i wg mnie musza byc globalne

np 1 funkcja z biblioteki ustawia 4 zmienne globalne, musza byc globalne bo pozniej te zmienne uzywa inna funkcja

zoobrazuje to moze tak

to jest kod glowny

Kod: Zaznacz cały

#include <testowa.mqh>

int wynik;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

Comment(MyCalculator(1,2)," \n",wynik);

   return(0);
  }
a tutaj mam biblioteke

Kod: Zaznacz cały

#property library

extern int wynik;

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
 int MyCalculator(int value,int value2)
   {
    wynik=value+value2;
    return(value+value2);
   }
//+------------------------------------------------------------------+
normalnie przez return zwraca ok ale przez zmienna wynik nie dziala jest 0

gdyby byla to 1 zmienna to nie ma problemu ale jak chce zeby funkcja wiecej zmiennych ustawiala?

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Masz 2 zmienne - jedna "zakrywa" [override] 2gą - nie możesz mieć 2 takich samych. Bo biblioteka widzi swoje zmienne a EA swoje.
To o czym mówię to

Główna:

Kod: Zaznacz cały

#include <testowa.mqh>

int wynik;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
wynik=MyCalculator(1,2);
Comment(wynik);

   return(0);
  }

Biblioteka:

Kod: Zaznacz cały

#property library

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
 int MyCalculator(int value,int value2)
   {
    return(value+value2);
   }
//+------------------------------------------------------------------+
Czyli w bibliotece masz same funkcje które nie odwołują się do żadnych innych danych z innych plików. A w kodzie tylko te funkcje wywołujesz.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

Tig3r pisze:Czyli w bibliotece masz same funkcje które nie odwołują się do żadnych innych danych z innych plików. A w kodzie tylko te funkcje wywołujesz.
i tego sie nie przeskoczy w zaden inny sposob? czyli jestem skazany na kilka tysiecy linijek w jednym pliku :D

dobra mysle ze jak dodam wiecej funkcji to mi sie uda to ograniczenie przezwyciezyc :D

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Spróbuj usunąć "int wynik; " z pliku biblioteki
czy da się czy nie - nie wiem - pewnie tak, ale osobiście wole aby było przejrzyście
po to jest biblioteka aby funkcje były wykorzystywane przez różne EA - więc lepiej się nie odwoływać do danych z innych plików
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
xpep
Pasjonat
Pasjonat
Posty: 844
Rejestracja: 02 gru 2007, 11:50

Nieprzeczytany post autor: xpep »

Tig3r pisze:po to jest biblioteka aby funkcje były wykorzystywane przez różne EA
w sumie nie taki byl moj cel ale udalo mi sie osiagnac to co chcialem no i tak jak piszesz teraz moge to w innych ea uzywac

ODPOWIEDZ