Yeni MQL4 sözdizimi - sayfa 5

 
gchrmt4 :
Hala anladığımdan emin değilim ama... MQL4 içe aktarımını geçersiz* olarak ilan edebileceğinizi sanmıyorum. İçe aktarmada belirli bir veri türü kullanmanız gerekir ve daha sonra yalnızca bu veri türüyle DLL içe aktarımını kullanabilirsiniz. Aynı DLL işlevini farklı veri türleri ile kullanmak istiyorsanız, https://www.mql5.com/en/forum/148934 gibi bir geçici çözüm olmadığı sürece bir sorununuz var demektir.


Aslında bir geçici çözüm kullanıyorum, ancak oldukça zayıf - herhangi bir türü genel bir yapıya sarmak. Genel bir yapının parametre olarak kabul edilmesi, gelecekteki herhangi bir sürümde değişebilir. Ancak bu, dizilerle çalışmaz.

 
Ovo :


Aslında bir geçici çözüm kullanıyorum, ancak oldukça zayıf - herhangi bir türü genel bir yapıya sarmak. Genel bir yapının parametre olarak kabul edilmesi, gelecekteki herhangi bir sürümde değişebilir. Ancak bu, dizilerle çalışmaz.

... Görünüşe göre yanılıyorum. İkimizin de unuttuğu şey, MQL4'ün artık aşırı işlev yüklemesine sahip olması ve bu nedenle şöyle bir şey yapmak mümkün:

 #import "AnyDll.dll"
   void Test(TestStruct &[]);
   void Test( int &[]);
#import 
 
gchrmt4 :

... Görünüşe göre yanılıyorum. İkimizin de unuttuğu şey, MQL4'ün artık aşırı işlev yüklemesine sahip olması ve bu nedenle şöyle bir şey yapmak mümkün:


Tabii, başından beri bahsettiğim şey bu :)

Şimdiye kadar içe aktarmam şöyle görünüyor:

 bool ReadFile( int , MT4Structure&, uint , uint &[], int ); // wrapper for all simple types / structures
bool ReadFile( int , double &[], uint , uint &[], int );
bool ReadFile( int , int &[], uint , uint &[], int );
bool ReadFile( int , uchar &[], uint , uint &[], int );
bool ReadFile( int , MT4Structure&[], uint , uint &[], int ); // this does not work

ve bu listenin (tek bir ithalat için) bir yılda ne kadar sürdüğünü merak ediyorum ...

 

Ayrıca, dahil edilen dosyalara bağımlı olan kodun derlenmesinde küçük tutarsızlıklar fark ettim.

İki veya daha fazla proje aynı içermeyi paylaşırsa ve içerme dosyası değiştirilirse, ilk projeler bunu algılayıp yeniden derlerken sonraki projeler bunu yapmaz. Yine de ciddi bir sorun değil (her an tüm ex4'leri silebiliriz).

 

Sadece hızlı bir cevaba ihtiyacım var, bugün aramaktan da yoruldum. Blok sınırına ulaşmadan kapsam2'yi yok etmek mümkün müdür? Sanmıyorum ama sormak daha iyi.

{
   MT4Scope* scope = new MT4Scope( _Symbol , 222 );
   MT4Scope scope2( _Symbol , 223 );
   delete scope; // calls destructor
   // here I want to call scope2 destructor, but I do not know how

   // some additional code
}
 
Ovo: Sadece hızlı bir cevaba ihtiyacım var, bugün aramaktan da yoruldum. Blok sınırına ulaşmadan kapsam2'yi yok etmek mümkün müdür? Sanmıyorum ama sormak daha iyi.
Numara.
 
ubzen :
Numara.


Teşekkür ederim.
 

MT4 600+ ve MT5 arasındaki "ArrayMaximum" neden farklıdır? MT4 sözdizimini MT5 sözdizimine taşımanın nedeninin, her ikisinde de çalışan uygulamalar geliştirmeyi kolaylaştırmak olduğunu düşündüm?!?!


MT4

 int    ArrayMaximum (
   const void &   array[],             // array for search
   int            count= WHOLE_ARRAY ,   // number of checked elements
   int            start= 0                // index to start checking with
   );


MT5

 int    ArrayMaximum (
   const void &   array[],             // array for search
   int            start= 0 ,             // index to start checking with
   int            count= WHOLE_ARRAY      // number of checked elements
   );
 
dlewisfl :

MT4 600+ ve MT5 arasındaki "ArrayMaximum" neden farklıdır? MT4 sözdizimini MT5 sözdizimine taşımanın nedeninin, her ikisinde de çalışan uygulamalar geliştirmeyi kolaylaştırmak olduğunu düşündüm?!?!

Muhtemelen biraz geriye dönük uyumluluk denemek ve sürdürmek için. . .
 
dlewisfl : MT4 600+ ve MT5 arasındaki "ArrayMaximum" neden farklıdır? MT4 sözdizimini MT5 sözdizimine taşımanın nedeninin, her ikisinde de çalışan uygulamalar geliştirmeyi kolaylaştırmak olduğunu düşündüm?!?!
İyi değil. Öyleyse kendin yap:
 int iArrayMaximum( const void & array[], int iLimit= WHOLE_ARRAY , int iBeg= 0 ){
   if (iLimit == WHOLE_ARRAY ) iLimit = ArraySize (array);
#ifdef __MQL4__
   return ( ArrayMaximum (array, iLimit - iBeg + 1 , iBeg) );
#else
   return ( ArrayMaximum (array, iBeg, iLimit - iBeg + 1 ) );
#endif
}
Sorun çözüldü.