Dizi referansları

 

Güdü:

Gerçek şu ki, hindilerde genellikle OnCalculate'e aktarılan zaman serilerine erişmeniz gerekir.

Bu işlevlerin iç içe yerleştirilmesi oldukça önemli olabilir ve bu diziyi OnCalculate'den tüm çağrı zinciri boyunca parametre olarak sürüklemeniz gerekir.

Zincirin önemli bir bölümünde bu diziye ihtiyaç duyulmamasına rağmen.

Ne istiyorsun:

Bunun gibi bir tür dizi referansı:

 class TimeReference
{
//
   datetime Time[];
};

TimeReference TimeRef;

datetime F()
{
   return TimeRef.Time[ 0 ];
}

int OnCalculate ( const int bars,
                 const int counted,
                 const datetime & time[],
                 const double & open[],
                 const double & high[],
                 const double & low[],
                 const double & close[],
                 const long & tick_volume[],
                 const long & volume[],
                 const int & sprd[])
{
   TimeRef.Assign(time);
   F();
}

ANCAK. Bir ön koşul, dizilerin kopyalanmamasıdır .

İlk bakışta, arzu gerçekleştirilemez görünecek. Ancak bunu yapmanın oldukça mümkün olduğuna dair şüpheler var.

Ne diyorsunuz beyler?

 

bu bir hatıra parçası. MQL'de açık bellek işaretçileri yoktur.

ancak memcpy aracılığıyla alabilirsiniz. İhtiyacı olan şeyi geri verir.

sonra değeri istediğiniz yere sürükleyebilirsiniz. ve benzer şekilde memcpy'yi değerine göre kullanın.

DLL hakkındaki makaleme bakın

 
sergeev :
Bu işaretçiyi nasıl geri alabilirim?
 
aynı memcpy . aslında işaretçi de ona aktarılır.
 
sergeev :
aynı memcpy. aslında işaretçi de ona aktarılır.

Hayır, işaretçiyi alabilirler ama kaydıramazlar.

__________

Tamam, kısacası, görünüşe göre normal olarak yapmak hala gerçekçi değil.

 
TheXpert :
Hayır, işaretçiyi alabilirler ama kaydıramazlar.

ve kaydırın, kontrol edin.

 
sergeev :

ve kaydırın, kontrol edin.

Bir örnek göster.
 
TheXpert :
Bir örnek göster.

Peki, makalede

Kodu yapıştırmaya çalışıyorum. sunucu donuyor.

 
sergeev :

Peki, makalede

Sadece makalede değil. Orada, bir diziden önceden hazırlanmış bir diziye yalnızca bellek kopyalama yapılır.
 
https://www.mql5.com/en/articles/364#3

ilk örnek

int Kaynak iletilir - aslında bir bellek adresi

ve char Dest[10] dizisine kopyalandı

Избавляемся от балласта самодельных DLL
Избавляемся от балласта самодельных DLL
  • 2012.01.31
  • o_O
  • www.mql5.com
Если MQL5-программисту недостаточно функционала языка, он вынужден обращаться к дополнительным инструментам. Для этого приходится использовать другой язык программирования и создавать промежуточную DLL. В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя. В данной статье мы поставим точку в этом вопросе и покажем простые механизмы обмена сложными типами данных и работе с ними.
 

peki, nasıl aldın? muhtemelen şimdi tüm türler için memcpy'yi aşırı yükledin mi?

64 bit adres boyutunun uzun olduğunu unutmayın.

-------------

Birinci öneri: Sizce geliştiricilerden long ArrayGetAddress( nesne dizisi) gibi yerel bir işlev yapmalarını istemeye değer mi?

Bunu kabul etmezlerse, iki tane önerin: #ifdef'i zorlamamız gerekiyor. Renat tanıtacağına söz verdi.