Hatalar, hatalar, sorular - sayfa 2654

 

Birisi buna biraz ışık tutabilir mi:

C# ile yazılmış ancak derlenmiş bir dll'miz var:

- MT5 için normal bir C# projesi - Net Framework dll - 64 bit

- MT4 için normal bir C# projesi - Net Framework dll - 32 bit, ancak yönetilen C çağrılarına sarılmış

dll kaynakları, MT4 için sarmalayıcı dışında, elbette %100 aynıdır.

İşletim Sistemi Win10-64

MT4'ün nedenişlev çağrılarını tam olarak 4 kat daha hızlı yaptığı soru, sayıların MT4 7.5 sn'de, MT5'te 30 sn'de yaklaşık 100.000 dll çağrısıyla aynı olduğudur.

 
Igor Makanu :

Birisi buna biraz ışık tutabilir mi:

C# ile yazılmış ancak derlenmiş bir dll'miz var:

- MT5 için normal bir C# projesi - Net Framework dll - 64 bit

- MT4 için normal bir C# projesi - Net Framework dll - 32 bit, ancak yönetilen C çağrılarına sarılmış

dll kaynakları, MT4 için sarmalayıcı dışında, elbette %100 aynıdır.

İşletim Sistemi Win10-64

MT4'ün nedenfonksiyon çağrılarını tam olarak 4 kat daha hızlı yaptığı soru, sayıların MT4 7.5 sn'de, MT5'te 30 sn'de yaklaşık 100.000 dll çağrısıyla aynı olduğudur.

BENİM NACİZANE FİKRİME GÖRE. Bir durumda C-çalışma zamanı ve diğerinde sanal makine.

 
Forumdaki yenilikleri kaçırdım, adı soyadı, tarih ve butonun yanında çeviriler, sayılar 1 2 3, herkeste yok, sanki dün bende yoktu, neden hepsi olmasın , ve tanımlanan sayfalar nelerdir?
 

EA bir grafik arayüze sahiptir. Kullanıcı olayları da uygulanır (örneğin, grafik arayüzü değiştirme olayları). Gerçek verilerde hata ayıklarım (F5). Bir kullanıcı olayına bir kesme noktası koyduğumda hata ayıklayıcı durur, ancak daha sonra F5'e basılması (hata ayıklama devam eder) grafik arabirimin kendisinde bir değişikliğe yol açmaz. Soru: Bunun böyle mi olması gerekiyor, yoksa bir hata ayıklayıcı hatası mı?

Kesme noktasını kaldırırsanız (hata ayıklama devam eder) - grafik arabirimdeki değişiklikler normal olarak gerçekleşir.

MT5 yapı 2340.

 
Vladimir Simakov :

BENİM NACİZANE FİKRİME GÖRE. Bir durumda C-çalışma zamanı ve diğerinde sanal makine.

her iki dll'de de sanal .Net dönüyor

kodlarda farklılıklar buldum, 32-bit temel sınıfın kendisinde ayrı bir iş parçacığında, kendim attım, çünkü başka bir şekilde çalışmıyor

MT5 için aynı manipülasyonu yaptı, sanki sonuç karşılaştırılabilirmiş gibi (her biri üç test):

MT5: döngü 100000, zaman 8.482981 sn, döngü 100000, zaman 8.638789 sn, döngü 100000, zaman 8.390046 sn

MT4: döngü 100000 , süre 7.128857 saniye , döngü 100000 , süre 7.176361 saniye , döngü 100000 , süre 7.205439 saniye


tamam, bunun Microsoft'tan bir tür kanca olduğunu varsayalım
 

Selamlar ! Tüm erkekler, iyi bayramlar!
Test cihazında zikzak eşitlik gösterimi ile ilgili garip hatanın ne olduğunu anlamıyorum. Broker hisse senedi bölümünün açılması, demo. "Takas Yöntemi" sembolünün ayarı "Borsa Stokları"ndan "Forex"e değiştirildiğinde, özkaynak normal şekilde görüntülenir. Aynısı birkaç yıl önce de gözlendi, MT5'i fona bağlamak istedim, test ettim, korktum ve her şeye tükürdüm. Şimdi tekrar denedim yine aynı. Biraz tuhaf???

 
"Kökenine" bakılmaksızın herhangi bir değişkenin geçirilebilmesi için "evrensel" bir argümanla bir işlevi uygulamak neden mümkün değil: değer, değer, değişmez veya geçici değişken?
Sorun, "yazılı" kap sınıflarının yöntemleri için çözülebilir, ancak sıradan işlevler için çözülemez.

Ana çelişki, yapıları geçmek için referansa göre geçiş kullanmak ve değişmezler ve geçici değişkenler için değere göre geçmek kullanmak gerekli olmasıdır.
Sonuç olarak, her iki aşırı yüklenmiş işlev de çağrı için uygun olduğundan, sıradan değer türleri için bir derleme hatası alıyoruz.
Kısmi bir çözüm olarak ve yalnızca "ilkel" türler için 12 aşırı yüklenmiş işlev oluşturulabilir:
 #define CREATE_LITERAL_PARAMETER_CALL_HANDLERS_VOID_T1_P2_L2(current_func_name, main_func_name, param_1)          \
   template < typename T> void current_func_name(param_1 p1, const string   value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const long     value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const int      value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const short    value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const char     value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const ulong    value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const uint     value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const ushort   value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const uchar    value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const double   value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const float    value){ main_func_name(p1, value);}      \
   template < typename T> void current_func_name(param_1 p1, const bool     value){ main_func_name(p1, value);}    
Ancak, işlevin iki "evrensel" argüman alması gerekiyorsa, uygulama yalnızca 144 aşırı yüklenmiş işlev gerektirirken, bu tür üç argüman olması durumunda bu, 1728 aşırı yüklenmiş işlevdir.


Teklif:
Son olarak, kullanıcıların sabit değerleri ve geçici değişkenleri const ref işlev argümanları olarak geçirmesine izin verin.
Ayrı bir yönerge olsun # - önemli değil...
 

Şablon işlevi/sınıf önbelleğindeki kusurlar:
(MT5(build 2340) tarafından sabitlenmemiştir ) ** Tanımsız Davranış, dahili "C" tipine sahip karmaşık, çoklu sarılmış bir nesne yaratırsınız ve bunun tamamen farklı bir veri türü olduğu ortaya çıkar, belki "B", belki "int ", ne istersen...
(MT5(build 2340) tarafından düzeltilmedi ) * Derleme Hatası, fonksiyon işaretçi argümanını const ref şablonu olarak geçirirken oluşan hata.
( MT5(build 2340) tarafından düzeltilmedi ) * Derleme Hatası, bir B<int> nesnesi bir B<void*> nesnesinden sonra oluşturulabilir, ancak daha önce yapılırsa bir derleme hatası oluşur.


Şablon işlevinin/sınıfının çalışmasındaki kusurlar:
(MT5(build 2340) tarafından düzeltilmedi ) ** Derleme Hatası, bir şablon işlevi içindeki bir hata, açık bir döküm işleminin parçası olarak geçirilen bir işaretçi, diğer durumlarda bir sınıf gibi davranır - bir işaretçi gibi.
(MT5(build 2340) tarafından düzeltilmedi ) ** Derleme Hatası, dahili sınıf kullanılırken şablon sınıfı kod oluşturma hatası.
(MT5(build 2340) tarafından düzeltilmedi ) ** Derleme Hatası, şablon işlevinin şablon parametresi için dahili sınıfa erişmeye çalışırken oluşan hata.
( MT5(build 2340) tarafından düzeltilmedi ) * Derleme Hatası, bir şablon yöntemi/sınıfı oluşturulurken oluşan hata, bir şablon parametresinin "otomatik değiştirme" süreci, ana program kodunun kapsamını aşıyor.
(MT5(build 2340) tarafından düzeltilmedi ) * Derleme Hatası, bir şablon sınıfı bir şablon yöntemi için bir dönüş değeri olarak hareket ettiğinde şablon sınıfı kodunun otomatik olarak oluşturulmamasıyla ilgili bir hata.
( MT5(build 2340) tarafından düzeltilmedi ) * Derleme Hatası, dahili sınıf tanımlanırken hata - temel sınıf belirtilirken genel ad alanına açıkça başvurmak mümkün değildir.


C++ ile karşılaştırıldığında MQL'de aşırı yüklenmiş işlev çağrılarının önceliklerinin uyumsuzluğundaki kusurlar:
( MT5(build 2340) tarafından düzeltilmedi ) *** Derleme Hatası, A <= B <= C <= D sınıflarının kalıtımı olduğunda ve iki aşırı yükleme işlevi uygulandığında, örneğin biri A* parametresiyle ve ikincisi B* ile, ardından MQL'de bir C* veya D* nesnesinin böyle bir işlevine geçiş, "aşırı yüklenmiş işleve belirsiz çağrı" derleme hatasına neden olur.
(MT5(build 2340) tarafından düzeltilmedi ) ** Çalışma zamanı, Aşırı yüklenmiş şablon işlevlerine yapılan çağrılar için öncelik uyuşmazlığı.



Teklifler:
link - değişmez değerleri ve geçici değişkenleri const ref işlev argümanları olarak iletme yeteneği sağlama hakkında.
bağlantı - "Proje" sekmesindeki proje dosyalarını taşırken, açık olan ve ME sekmelerinde bulunan dosyaları taşımak için konum yollarını otomatik olarak günceller.
link - MQL typedef bildirimine işlevsellik ekleme ihtiyacı hakkında.
bağlantı - varsayılan kopya oluşturucuların ve atama operatörlerinin oluşturulmasını zorlama yeteneği sağlama hakkında.


 

Lütfen yardım edin, konu dışı.

OnChartEvent'te `C` tuşuna basarak fiyat tablosunu iptal/restore ediyorum.

Ve her şey iyi olurdu, ancak İngilizce olmayan bir klavye düzeni seçilirse çalışmaz.


Seçilen düzenden bağımsız olarak "C" tuş vuruşu algılaması nasıl yapılır?

 
fxsaber :

Lütfen yardım edin, konu dışı.

OnChartEvent'te `C` tuşuna basarak fiyat tablosunu iptal/geri yükledim.

Ve her şey iyi olurdu, ancak İngilizce olmayan bir klavye düzeni seçilirse çalışmaz.


Seçilen düzenden bağımsız olarak "C" tuş vuruşu algılaması nasıl yapılır?

lparam'ı kontrol etmeniz gerekiyor

 //+------------------------------------------------------------------+
//|                                                 TranslateKey.mq5 |
//+------------------------------------------------------------------+
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   if (id== CHARTEVENT_KEYDOWN )
     {
       short sym= TranslateKey (( int )lparam);
       //--- if the entered character is successfully converted to Unicode
       if (sym> 0 )
         Print ( "lparam: " , lparam , ", " ,sym, "'" , ShortToString (sym), "'" );
       else
         Print ( "Error in TranslateKey for key=" ,lparam);
     }
  }
//+------------------------------------------------------------------+

ru ve en düzenleri için (hem küçük hem de büyük harf için), lparam 67 olacaktır:

 TranslateKey (EURUSD,H1)        lparam: 67 , 67 'C'
TranslateKey (EURUSD,H1)        lparam: 67 , 1057 'С'
TranslateKey (EURUSD,H1)        Error in TranslateKey for key= 20
TranslateKey (EURUSD,H1)        lparam: 67 , 1089 'с'
TranslateKey (EURUSD,H1)        lparam: 67 , 99 'c'