Pamiec dzielona

O jezykach programowania w platformach i nie tylko.
crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Pamiec dzielona

Nieprzeczytany post autor: crn »

Witam
Czy ktos z was uzywal pamiecidzielonej w mql?
Pisanie do pamieci dziala dobrze, natomiast pisanie to niej nie idze juz mi w ogole. Czy jest mozliwosc odczytania z pamieci dzielonej (WinAPI) za pomoca referencji?

probuje ten sposob:

mql:

Kod: Zaznacz cały


#import "aaa.dll"
int ReadData(int &Size[], int &Counter[], int &Ticket[],double &OpenPrice[], int &OpenTime[], double &Lots[], int &SL[], int &TP[],int &Type[],string &symbol[]);
#import


c++

Kod: Zaznacz cały


int ReadData(int *Size, int *Counter, int *Ticket,double *OpenPrice, int *OpenTime, double *Lots, int *SL, int *TP,int *Type,MqlStr* symbol)
{	

//wszyskie zmienne to tablice.

}

Pozdrawiam

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

Nieprzeczytany post autor: dulf »

Ja używam tej metody , plikow mapowanych w swap File Wnd32 ,ALE bez referencji.Trochę przesadziłeś , wystarczą zwykłe wskażniki.Przesyłanie ref do tablicy to przegięcie ....
Czyli chcesz przesłać np. int ** cos ?
Jeśli nie ,to wywalasz te ref i masz normalnie przesył danych przez tablice , tablica (nazwa) jest "adresem" danych .
Zależy w którym kierunku chcesz dane przesłać .Jeśli do MQL to w programie zewnętrznym musisz i tak ustalić odrębny obszar dla danych z których fun .dll będzie czytać .
Pisanie do pamieci dziala dobrze, natomiast pisanie to niej nie idze juz mi w ogole
To zdanie jest do kitu !!!! Nie określiłeś problemu dokładnie.
Nie spiesz się , zawsze zdążysz stracić .

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

crn pisze:Pisanie do pamieci dziala dobrze, natomiast pisanie to niej nie idze juz mi w ogole.
Ja bym rzekł, że pisanie to w ogóle cienko Ci wychodzi - niby po polsku ale ni cholery nie można zrozumieć w czym problem :)
Nie wspominając już o tym, że nie ma czegoś takiego jak "pamięć dzielona" :)
Green
Obrazek
Obrazek

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

green7 pisze:Nie wspominając już o tym, że nie ma czegoś takiego jak "pamięć dzielona"
http://pl.wikipedia.org/wiki/Pamięć_dzielona

pozdrawiam
Andrzej

Dodano po 2 minutach:

nawet jak w wiki wpiszesz pamięć współdzielona wyskakuje dzielona :)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

No tak racja, nie uwzględniam naszych "specyficznych" tłumaczeń.
Wg mnie błędnych: bo jest to "shared memory". Czyli pamięć wspólna, współdzielona, no ale ok niech będzie dzielona, jest krócej choć dla mnie brzmi dziwacznie :)
Green
Obrazek
Obrazek

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

Nieprzeczytany post autor: crn »

Rozwiazlem problem. Najwiekszy byl przy strignach. Okazalo sie ze deklaracja tablicy string cos[10] = {"f"}; to za malo.
W momencie, zaczelo dzialac, jak dodalem wiecej znakow i uzupelnilem cala tablice tzn.

cos[10] = {"ffsdfsdfsdfsdfsdfsdfsdf","ffsdfsdfsdfsdfsdfsdfsdf","ffsdfsdfsdfsdfsdfsdfsdf"}; .. itd. Moze komus sie kiedys przyda

Pozdrawiam

Awatar użytkownika
warnisz
Stały bywalec
Stały bywalec
Posty: 23
Rejestracja: 20 wrz 2011, 12:42

Nieprzeczytany post autor: warnisz »

green7 pisze:
No tak racja, nie uwzględniam naszych "specyficznych" tłumaczeń.
Wg mnie błędnych: bo jest to "shared memory". Czyli pamięć wspólna, współdzielona, no ale ok niech będzie dzielona, jest krócej choć dla mnie brzmi dziwacznie :)
Oczywiście tłumczenie "shared memory" na "pamięć dzielona" jest semantycznie wątpliwe, niezwykle mylące i ogólnie do dupy. Słowo "dzielona" może powodować u odbiorcy błędne przeświadczenie, iż jest to pamięć PODZIELONA, a chodzi przecież nie o podział, a o współużytkowanie czyli współdzielenie. No ale jest jak jest. Cieszmy się, że do kanonu nie weszły takie ciekawostki jak na przykład dwumlask myszką.

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

Nieprzeczytany post autor: crn »

Dla mnie tlumaczenie ejst trafne - jest to pamiec, ktora (wspol)dzieli wiecej niz 1 program

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

Nieprzeczytany post autor: dulf »

crn pisze:Rozwiazlem problem. Najwiekszy byl przy strignach. Okazalo sie ze deklaracja tablicy string cos[10] = {"f"}; to za malo.
W momencie, zaczelo dzialac, jak dodalem wiecej znakow i uzupelnilem cala tablice tzn.

cos[10] = {"ffsdfsdfsdfsdfsdfsdfsdf","ffsdfsdfsdfsdfsdfsdfsdf","ffsdfsdfsdfsdfsdfsdfsdf"}; .. itd. Moze komus sie kiedys przyda

Pozdrawiam
A jakie masz prototypy funkcji ? Takie jak wcześniej z referencjami ?
Dostęp do tablicy z MQL string &symbol[] powinien odpowiadać po stronie "C/C++" jako const char** .(chyba :roll: )

Zwykła tablica MQL w deklaracji np. double xx[] odpowiada po stronie kodu dll jako double*wsk .
Adres do adresu powinien zawierać ** , a tym jest tablica stringów 'C' .
Trochę jest zamieszane , bo w MQL chcąc zmodyfikować tablice trzeba przesłać do funkcji ref do tablicy . W C nie istnieje taka konieczność bo i tak funkcja otrzymuje adres .Pewnie różnica wynika z def stringów MQL bardziej jako std z C++ .Tak daleko nie sięgałem , bo nie było mi to potrzebne , właściwie korzystam z kodu przesyłającego pojedyncze string i tablice double .
Pamięć mam oddzielną na odczyt i zapis MQL<->C++ .
Czyli jest dosyć prosto ,bez kombinacji zwrotnego zapisu/odczytu tych samych zmiennych .No bo po grzyba :roll: motać ?
Nie spiesz się , zawsze zdążysz stracić .

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

Nieprzeczytany post autor: crn »

wszystko tak jak wczesniej z tablicami i referencjami. Pewnie same zmienne z referencja tez by dzialaly, ale juz nie chcialem mieszac. Wynika z tego, ze MT4 musi jakos sam w trakcie dynamiczne przydzielac pamiec dopiero.

przy stringach tworze sobie

MqlString
{
int len;
char *str;
}

i w naglowku funkcji mam MqlString *x;

I wszystko smiga :)

ODPOWIEDZ