Hatalar, hatalar, sorular - sayfa 1017

 
A100 :

Kısacası, bir işlevin uygulamasını .mqh'de tanımlamak ve herhangi bir .ex5'te sorunsuz kullanmak imkansızdır.

:)

Yapabilir. Ancak, bir .ex5'ten başka bir .ex5'in işlevlerini çağırdığınızda, her ikisinde de aynı ada sahip bir işlev bulunmasına rağmen, ad alanının tam gösterimine dikkat etmelisiniz. Yani, aynı :: In () teorik olarak sorunu çözmelidir. Ve eğer çözmezse, bu servis masasındadır, çünkü bu düzeltilmesi gereken bir hatadır.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 

ServiceDesk'in cevabı üzerinde duralım:

"1.mq5 derlenirken, B() işlevi içinde hangi işlevin çağrılması gerektiği net değil,
içe aktarılan A() veya dışa aktarılan A() - çünkü derleyici aynı işlevi kastettiğinizi anlamıyor"

Formda haklılar - ancak istenirse, derleyiciye bunun aynı işlev olduğu söylenebilir (ve söylenmelidir), çünkü derleme sırasında modülün adını tekrarlıyorum - mevcut (#import ile belirtilir).

Ayrıca, önce :: bir yere koyar ve derlerseniz, sonra siler ve :: başka bir yere koyarsanız, o zaman her şey çalışır, ancak itiraf etmelisiniz - bu çok uygunsuz ve bu tür 10-15 zorunlu permütasyondan sonra #define'a geçtim

 
A100 :

ServiceDesk'in cevabı üzerinde duralım:

"1.mq5 derlenirken, B() işlevi içinde hangi işlevin çağrılması gerektiği net değil,

içe aktarılan A() veya dışa aktarılan A() - çünkü derleyici aynı işlevi kastettiğinizi anlamıyor"

Kesinlikle, aynen öyle.


Formda haklılar - ancak istenirse, derleyiciye bunun aynı işlev olduğu söylenebilir (ve söylenmelidir), çünkü yine, modül adı derleme sırasında kullanılabilir (#import'ta belirtilir).

Bu tür ipuçları için bir bağlam çözümleme operatörü "::" vardır, ancak bu durumda modül (dosya) adı da eşleştiğinden geçerli değildir.

Tavsiye yeterlidir - programın yapısını değiştirmek için.

Ayrıca, önce bir yere :: koyar ve derlerseniz ve sonra silip :: başka bir yere koyarsanız, o zaman her şey çalışır, ancak itiraf etmelisiniz - bu çok elverişsizdir

Bu tür hilelerden en iyi şekilde kaçınılır. Bu sadece uygunsuz değil, aynı zamanda "ırksal olarak yanlış", "koşer değil", "çirkin" ve "sümük". Derleyiciyi aldatma girişimleri, yalnızca planı uygulamak için başka seçenek yoksa var olma hakkına sahiptir. Bu durumda, birçoğu var.


ve bu tür 10-15 zorunlu permütasyondan sonra #define'a geçtim

En iyi çözüm değil. Parametreli tanımlar, yalnızca tür denetimi istenmediğinde veya parametreler için "ayrıntılı" metin parçaları kullanıldığında yararlıdır. Bir satır içi işlevin yerine geçen tanım, programın sağlığı için kesinlikle kötüdür.

--

Senin durumunda, .ex5 kitaplıklarını kullanmayı reddederdim. Ve her şey bir düdükle çalışacaktı. Bunların pratik kullanımı sadece uygulamayı gizlemek (satarken) ve diğer durumlarda onlardan bir fayda görmüyorum.

satılık mı yazıyorsun

 
MetaDriver :

satılık mı yazıyorsun

Kendin için.

.ex5 olmadan çalışmaz. Ayrıca F( string& [] ), bir şekilde .dll'ye uymuyorlar :)

Muhtemelen onları bir şekilde ayırıcıdan geçirebilirsin, ama henüz denemedim

 
A100 :
Sadece MQL5'te satır içi işlevler (formda) yoktur ve bunların yerine parametrik makrolar kullanıyorum, bu genel olarak tamamen doğru değil, çünkü tür kontrolü yok

Yine de emnip, derleyici ifadeleri optimize etmez, bu nedenle hız açısından ek bir eksi olacaktır. Daha iyi kontrol et.

Satır içi konuşmaktan bahsetmişken, işe yarıyor. Bu nedenle, hata ayıklayıcıyla ilgili sorunlar hala vardı.

 
TheXpert :

Satır içi konuşmaktan bahsetmişken, işe yarıyor. Bu nedenle, hata ayıklayıcıyla ilgili sorunlar hala vardı.

Derleyici düzeyinde bu şekilde çalışır. Ve dil düzeyinde istiyorum. Yukarıda bir örnek verdim - anlaşılmaz bir "derleyici atlaması" yoluyla - her şey çalışıyor, ancak doğrudan - ek hareketlere ihtiyaç var, bazen önemli, çünkü tavsiye ettiğiniz gibi, elbette açıklamasını ve uygulamasını dahil etmemek mümkündür. bir dosyada aynı işlev, ancak daha sonra 10 tam teşekküllü .mqh zaten 100 daha küçük .mqh'ye bölünmüştür

Henüz hız peşinde değil. Önemli olan kolaylık ve kod miktarının katlanarak artmaması .

MQL5'te #if #else analoglarını kullanma ihtiyacıyla bile karşılaştım (şimdilik çarpık, ancak bazı yerlerde çalışıyor)

 
A100 :

Henüz hız peşinde koşmadım. Ana şey kolaylık ve kod miktarının katlanarak artmaması.

Senin işin. Ancak, kısıtlamalar için meta alıntıların patolojik sevgisi göz önüne alındığında, bu tür makrolarla hala birkaç tırmık yakalamanız sıfırdan çok uzaktır.
 

A100 :

.ex5 olmadan çalışmaz. Ayrıca F( string& [] ), bir şekilde .dll'ye uymuyorlar :)

....

Tanrı.. .. :)

.ex5 kitaplıkları yerine DLL'lerin kullanılmasını önermedim. Yalnızca bir sürü .mqh ve bir yürütülebilir .mq5, başka bir şey değil.

 
MetaDriver :

Yalnızca çok-çok .mqh ve bir yürütülebilir .mq5, başka bir şey yok

3 farklı terminalde bir kod kullanıyorum, bu nedenle en az bir tane daha .ex5 (herkes için ortak) olmalıdır. Ve eğer öyleyse, yukarıda açıklanan probleme geri dönüyoruz - sadece 2 modül var - ama bunlar normal bir şekilde derlenmiyorlar.
 
ChartGetInteger ( chart_ID, CHART_BRING_TO_TOP , 0 , true )
ChartGetInteger ( chart_ID, CHART_BRING_TO_TOP , true )
İşlem dışı saatlerde açık değildir. Ve işlem yapmayan bir zamanda diğerlerinin üzerine bir grafik yerleştirmenizi engelleyen nedir?