[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 250

 
TarasBY :
İlk olarak, tüm açık siparişler için mevcut karı hesaplarsınız, ardından bunu beyan edilen seviye ile karşılaştırırsınız: eğer daha yüksekse, tüm emirleri silin. Bu prosedür (ve sadece değil) bu Uzman Danışman tarafından gerçekleştirilir (kod vardır).

Bahşiş için teşekkürler
 

Anlamıyorum.

gyfto :
//C++
MT4_EXPFUNC int __stdcall GetStrAddress( const char *str) {    
    MqlStr* s = (MqlStr*)str;
     return ( int )s-> string ; 
}

Zhunko :
Hala böyle:

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
   return ( int (szStr));
 }

Bu kodla üç kez çalıştırın:

 #property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString( int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress( string str);
int GetStrAddress( string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s= "" ; strAddress (s);
   s=s+ "something" ; strAddress (s);
   s= "MyStr" ; strAddress (s);
   s= "mystr" ; strAddress (s);
   return ( 0 );
  }

int start()
  {
   return ( 0 );
  }
void strAddress ( string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print ( " строка " , CharToStr( 34 ), myStr, CharToStr( 34 ), ", старый вариант: " , IntegerToHexString(addrOld), ", новый вариант: " , IntegerToHexString(addrNew));
  }

Günlük şunları gösterdi:

строка "" , старый вариант: 656D6F73 , новый вариант: 01CD8A90
строка "something" , старый вариант: 6E696874 , новый вариант: 01CD9010
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01CD8AA0
строка "mystr" , старый вариант: 00360072 , новый вариант: 01CD8AA8

строка "" , старый вариант: 656D6F73 , новый вариант: 01C97858
строка "something" , старый вариант: 6E696874 , новый вариант: 01CDCC30
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01C978868
строка "mystr" , старый вариант: 00360072 , новый вариант: 01C997870

строка "" , старый вариант: 656D6F73 , новый вариант: 01D93108
строка "something" , старый вариант: 6E696874 , новый вариант: 01CC5A58
строка "MyStr" , старый вариант: 00360072 , новый вариант: 01D93118
строка "mystr" , старый вариант: 00360072 , новый вариант: 01D93120

İlk varyantta, MqlStr.string yapısının alanının ilk öğesine bir işaretçimiz var, ikinci varyantta, dizenin ilk öğesine bir işaretçi (L P C STR hala aynı const karakter * ). Farklı adresler görüyoruz. N-n-neden? MQL4'teki temsilinin bir iç yapısı olarak bir karakter dizisi ve bir dizgenin farklı adresleri olduğu ortaya çıktı mı? Yoksa ExpertSample'da dahili bir format olarak tanımlanan "string yapısının" yapay olduğu ve aslında MQL4'teki dahili formatının lpsz olduğu anlamına mı geliyor? Yoksa ilk kodu yanlış mı okudum?

 
Hepinize iyi günler. lütfen söyle bana, derlemelerden sonra, danışman simgesinde bir kilit beliriyor ve onu sadece program aracılığıyla indirme penceresinde görebiliyorum ve klasörde görünmüyor, nasıl düzeltilir? Teşekkür ederim.
 
Bazı örneklerde return(-1), return(0) veya sadece return görüyorum. Programı belirli bir noktadan kesmek için return(0) kullanıyorum. return(-1) ve return'ün ne yaptığını söyler misiniz?
 
gyfto :
Yoksa ExpertSample'da dahili bir format olarak tanımlanan "string yapısının" yapay olduğu ve aslında MQL4'teki dahili formatının lpsz olduğu anlamına mı geliyor?

Bu, dizenin DLL'ye MqlStr olarak değil, tam olarak char* olarak geçirildiği anlamına gelir. Ancak bu , ex4 programının dizeyi MqlString olarak saklamadığı anlamına gelmez. Genel olarak , ex4'ten dll'ye parametre geçişi (geliştiricilere göre) oldukça karmaşık bir işlemdir, buna her türlü kontrol ve parametre dönüşümü eşlik eder.
 
laveosa :
Hepinize iyi günler. lütfen söyle bana, derlemelerden sonra, danışman simgesinde bir kilit beliriyor ve onu sadece program aracılığıyla indirme penceresinde görebiliyorum ve klasörde görünmüyor, nasıl düzeltilir? Teşekkür ederim.
7 kazanın ve terminal sistem sürücüsünde mi? Mevcut ve gelecekteki sorunlardan kurtulmak istiyorsanız - terminali başka bir diske aktarın ve "her şey yoluna girecek".
 
paladin80 :
Bazı örneklerde return(-1), return(0) veya sadece return görüyorum. Programı belirli bir noktadan kesmek için return(0) kullanıyorum. return(-1) ve return'ün ne yaptığını söyler misiniz?
Bu, işlevin dönüş değeridir. mat.chasti'ye dön.
 
paladin80 :
Bazı örneklerde return(-1), return(0) veya sadece return görüyorum. Programı belirli bir noktadan kesmek için return(0) kullanıyorum. return(-1) ve return'ün ne yaptığını söyler misiniz?

return(-1), işlevin sonucu olarak eksi bir döndürür, bu da (-1) yalnızca bu programın geliştiricisi içine bir şey koyarsa bir şey ifade edebilir. Aksi takdirde, hiçbir şey ifade etmez.

return işlevi basitçe sonlandırır (dönüş türü geçersiz olduğunda kullanılır).

 
TarasBY :
Bu, işlevin dönüş değeridir. mat.chasti'ye dön.

Genel olarak, return( 0 ) int start() işlevini sonlandırır ve bir sonraki onay işaretini bekler. Rakam veya -1 yoksa int start()'ta ne olur?

 
TarasBY :
7 kazanın ve terminal sistem sürücüsünde mi? Mevcut ve gelecekteki sorunlardan kurtulmak istiyorsanız - terminali başka bir diske aktarın ve "her şey yoluna girecek".

çok teşekkür ederim :) Deneyeceğim.