OOP, mql5'te şablonlar ve makrolar, incelikler ve kullanım teknikleri - sayfa 24

 
Vict :

Bu muhtemelen işe yarayacaktır:

böyle çalışmıyor

#import bir dosya adı bekliyor

kurban :

Sadece anlamadım - hangi mumların yakıldığı uğruna?

dll'de bağlantı yöneticisi yapmak istemiyorum, ancak MT4'te bir nedenden dolayı, 2 EA'dan 2 kez dll çağırırsanız, bellekte dll'nin yeni bir kopyası oluşturulmaz (dll'deki statik nesneler, bir sarmalayıcı) .Net üzerinden - bir dll çalıştırırsanız çöküyor, 2 farklı dosya sorun değil),

bu yüzden çabucak yapmak istedim - sadece mylib.dll dosyasını mylib02.dll'ye kopyalamak ve her şey sorunsuz çalışıyor .... ama global olarak makro ikamesi ilan etmek istiyorum

 
Igor Makanu :
böyle çalışmıyor

Bu bir hata/gözetim gibi görünüyor. Önceki gönderideki PS'ye dikkat edin

Not: Hala gerçekten istiyorsanız, o zaman adı deneyin veya name_dll (nokta olmadan) verin, belki çıkar.

 
Vict :

Bu bir hata/gözetim gibi görünüyor. Önceki gönderideki PS'ye dikkat edin

MT4'te böyle değil.

MT4 dll'nin kendisi yalnızca çalışma zamanında görülecektir, ancak sizinle tartıştığım şey derleyicinin kendisi tarafından kaçırılmaz, yani. derleyici bu şekilde atlayacaktır

 #import "mylib.dll"
#import
 #import "mylib"
#import

ve şöyle yazarsanız:

 #import 
"mylib.dll"    //'mylib.dll' - expressions are not allowed on a global scope
#import

onlar. sabit sözdizimi yönergesi #import + tırnak içinde bazı dizeler - ve hepsi tek satırda

AMA fig biliyor - neden #import "mylib.dll" dosyasını makro değiştirme yoluyla kendi kombinasyonumla değiştiremiyorum

kurban :

Not: Hala gerçekten istiyorsanız, o zaman adı deneyin veya name_dll (nokta olmadan) verin, belki çıkar.

Koşullu derleme ile içermeyi neden toplayamadığımı anlamıyorum? - her şey çok ilkel, bir şekilde MQL'de çalışıyor .... umarım anlamamışımdır
 
Igor Makanu :

MT4'te böyle değil.

MT4 dll'nin kendisi yalnızca çalışma zamanında görülecektir, ancak sizinle tartıştığım şey derleyicinin kendisi tarafından kaçırılmaz, yani. derleyici bu şekilde atlayacaktır

ve şöyle yazarsanız:

onlar. sabit sözdizimi yönergesi #import + tırnak içinde bazı dizeler - ve hepsi tek satırda

AMA fig biliyor - neden #import "mylib.dll" dosyasını makro değiştirme yoluyla kendi kombinasyonumla değiştiremiyorum

Koşullu derleme ile içermeyi neden toplayamadığımı anlamıyorum? - her şey çok ilkel, bir şekilde MQL'de çalışıyor .... umarım anlamamışımdır

Senin için neden işe yaramadığını bilmiyorum, her şey benim için çalışıyor

 #define DD "jkjk.dll"
#import DD
void fn();
#import
Artık farklı Uzman Danışmanlarda ("lib_1.dll", "lib_2.dll") farklı DD'ler ayarlamak çok kolay.
 
Vict :

Senin için neden işe yaramadığını bilmiyorum, her şey benim için çalışıyor

Artık farklı Uzman Danışmanlarda ("lib_1.dll", "lib_2.dll") farklı DD'ler ayarlamak çok kolay.

Üzgünüm, unuttum - kaynaklarım µl cinsinden argo ön işlemcisinden geçiyor - evet, çalışmıyor.

 
Vict :

Üzgünüm, unuttum - kaynaklarım µl cinsinden argo ön işlemcisinden geçiyor - evet, çalışmıyor.

genel olarak, kaba kuvvet MQL'yi aldı, bu yüzden amaçlandığı gibi çalışacak

 #ifdef USE_DLL_NUMBER
   #ifdef USE_DLL_NUMBER02 
       #import "mylib2.dll"
   #endif 
#else 
#import "mylib.dll"    
#endif

ana kodda 2 makro değişikliği ilan ediyorum

 #define USE_DLL_NUMBER

#define USE_DLL_NUMBER02 

... tek bir makroya indirgeyin USE_DLL_NUMBER02 - genel olarak, zaten bana uygun olana benzer bir şey - USE_DLL_NUMBER03 , USE_DLL_NUMBER04 yazabilmek istiyorum - gelecekte istersem

 
Igor Makanu :

... tek bir makroya indirgeyin USE_DLL_NUMBER02 - genel olarak, zaten bana uygun olana benzer bir şey - USE_DLL_NUMBER03 , USE_DLL_NUMBER04 yazabilmek istiyorum - gelecekte istersem

genel olarak, kaba kuvvet yardımıyla bu sorunu çözdüğü ortaya çıktı.

 #ifdef USE_DLL_NUMBER01 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER02  
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER03 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER04 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER05 
#define USE_DLL_NUMBER 
#endif
 

Değere göre çalışan mql4'te #if makrosu neden uygulanmıyor, türde seçici nesneler oluşturmak mümkün olabilir

 #define Znah 0
#define PrmI int     Peremen= 6 ;
#define PrmD double Peremen= 3.345 ;

#if Znah //если больше 0 то появится переменная int Peremen
   PrmI
#else
   PrmD //иначе появится переменная double Peremen
#endif
Sonuç olarak, sonraki programın tamamı istenen tipte düzenlenebilir.
 
Bu ifadenin false döndürdüğünü hiç görmedim.
 ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Bu nedenle, işlem geçmişine dayalı olarak bir emrin gerçekleşme süresi hakkında istatistik tutmak zordur.

Piyasa emirleri için ORDER_TIME_SETUP_MSC değeriyle eşleşme hala mümkünse, beklemede olması anlamsızdır.

 
Büyük ihtimalle muz. const değiştirici, nesnenin değiştirilmeyeceğini garanti etmez.
 struct A
{
   int i;

   void f( const A &Value )  
  {
     Print (Value.i); // 0
    
     this .i = Value.i + 1 ;
    
     Print (Value.i); // 1
  }
};

void OnStart ()
{
  A a;
  
  a.f(a);
}


Muhtemelen, bu gibi durumlarda bazı derleyiciler uyarı verir.