"10 dakikada MQL5 için DLL kütüphanesi nasıl yazılır ve veri alışverişi yapılır?" makalesinin tartışılması - sayfa 4

 
Ve bende "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) 0x00000000'e 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll' dosyasına erişim ihlali yazıyor" mesajı nedir?
MT5 build 240. dll çağrısına izin verildi.
 
joo :
Ve bende "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) 0x00000000'e 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll' dosyasına erişim ihlali yazıyor" mesajı nedir?
MT5 build 240. dll çağrısına izin verildi.

Makale demosundan:

4. DLL işlevlerinde istisnaları yakalama

Terminalin çökmesini önlemek için DLL işlevlerine yapılan her çağrı, bir İşlenmeyen İstisna sarmalayıcısı tarafından otomatik olarak korunur. Bu mekanizma, kendinizi çoğu standart hatadan (erişilemeyen belleğe erişim, sıfıra bölme vb.)

Bu mekanizmanın işlevselliğini test etmek için aşağıdaki kodu oluşturacağız:

_DLLAPI void __stdcall fnCrashTest( int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr= 0 ;
  }

ve terminalden arayın:

 #import "MQL5DLLSamples.dll"
void fnCrashTest( int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest( NULL );
   Print ( "Этого текста не увидите!" );
//---

Sonuç olarak, bir istisna oluşturularak sıfır adrese yazılmaya çalışılacaktır. Terminal onu durduracak, günlükte rapor edecek ve çalışmaya devam edecektir:

MQL5DLL Test (GBPUSD,M1) 20 : 31 : 12 Access violation write to 0x00000000


 
Renat :
Makale demosundan:

Teşekkür ederim. O yüzden yazıyı okuduğumda çok dikkatli değildim. :)

Not Ve şöyle diyebilirim: "Dinle yoldaş! Git makaleyi tekrar oku!" - ve o haklı olurdu. Dedikleri gibi saygı ve saygı.

 
Renat :

sevgili pisar,

Açıklığa kavuşturalım - teorisyen ile uygulayıcı arasında bir anlaşmazlık var.
Kişiselleşmeden, esasen. İyi bir teorisyen pratik olarak birikmiş deneyimden yola çıkar, iyi bir uygulayıcı yedi kez ölçer.

Tabii ki, kimse "dünya barışı" için savaşmanızı yasaklamıyor, ancak "neden gelişmeyesiniz?" dışında daha fazla faktör düşünün.

Ben öyle yazdım - kullanmayacaksın çünkü rutini yapmak istemiyorsun. Sonuçta, her şeyi gümüş bir tepside vermeniz gerekecek - tüm göstergeler, tüm piyasa ortamı, farklı dönemlerdeki tüm tarih vb. Ve çizelgeleme gerekli olurdu, ancak aklınızda göstergeleri manipüle edecek misiniz?

Yani, aslında tam teşekküllü bir terminale ihtiyacınız var. Ve biz bunu sağlıyoruz: MetaTrader 5 + MQL5 + DLL. Bunu bir çerçeve olarak adlandırın veya hemen söyleyin - kaynaklarda / bileşenlerde terminale verin (sonuçta, aslında buna ihtiyacınız var).

Bu bir barışı koruma faaliyeti değil, ancak görüyorsunuz, bir programcı için hayatı kolaylaştırıyor ve ticaret sisteminin kalitesini artırıyor + entegrasyon olasılığı henüz kimseye zarar vermedi. Örnekler çok uzakta değil: Borland Delphi, MS .net, platform kullanıcıları için tamamen açık bir çerçeve / bileşen tabanı / sınıf diyagramlarına ve hatta kaynak kodunun (Delphi) önemli bir bölümüne sahiptir.

Programcılar, yanlışlıkla, ticaret sistemleri için korumasız ana dillerde komut dosyası yazabilmenin "güç" olduğunu düşünürler ve sonra hiç kimsenin yarattıklarını kullanmayacağına şaşırırlar. Bu nedenle doğar doğmaz ölürler. Bir kullanıcı topluluğu geliştirip oluşturanlar, çok daha derin düşünürler (çünkü daha önce de tümsekleri doldurmuşlardır) ve bu tür hatalar yapmazlar.
Gerçekçi olalım. Yazılımı yayınlayıp satmak istiyorsanız, altı ay veya bir yıl içinde ücretli bir güncelleme yayınlayın, o zaman kod koruması sizin için çok önemlidir. Anladığım kadarıyla, uzun süredir buradaysanız ve bir dizi yapı ve destekle platformu sürekli olarak geliştirirseniz, o zaman hiçbir rakip sizi alamaz. Ancak kullanıcılar çok daha iyi kod yazabilecekler. Ve sadece kod değil, aynı zamanda daha az önemli olmayan aracın yapısı da! Virüsten koruma programlarıyla bir benzetme bile yapabilirim - bir AV istemcisini hacklemek henüz virüs veritabanı güncellemesine erişim sağlamaz (burada - kotalar).

Kontrollü (varsayılan olarak devre dışı bırakılmış) bir DLL çağrısı kabul edilebilir, ancak kimsenin bilmediği DLL'leri ticaret terminalinize yüklemek, yamasız Internet Explorer 6'dan daha kötü bir boşluktur.
Yani bu delik sadece kullanıcının iznidir! Zayıf bir kullanıcı, X şirketi tarafından imzalanmış olsa bile bir DLL dosyasında %100 zararlılık bulunmadığını nasıl garanti edebilir? Ne de olsa, şüpheyle yasakladığı için, bunun kendisine faydalı olup olmayacağını asla bilemez. İşte psikoloji...


Bilgi için, otomasyonlu ticaret terminalleriyle ilgili Google Trendler istatistikleri :

Acaba ordinat ölçeği logaritmik mi?
Bu arada, Rusya'ya yansıma verileri, kırmızı Metastock'un liderliğini görebilirsiniz:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Lütfen "Yanıtla" özelliğini kullanın. Okumak çok rahatsız edici.

Alıntılanmış bir bloğu kırmak için imleci istediğiniz yere getirin ve "Düz Metin" stilini seçin veya Ctrl+1 tuşlarına basın.


Genel olarak, bu tür tavsiyelerle bitirmenizi öneririm - temelde ölümcüldürler, yanlış öncüllere dayanırlar ve uygulamalı bir dil için uygun değildirler.

Şaka olarak eski bir fıkra vardır:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Yoldan geçen bir Yahudi'nin yanına gelir, bir ruble atar ve der ki:

- Dinle, yazıyı değiştir yoksa aç kalırsın.

Yoldan geçen kişi gidince Yahudi komşusuna dönerek şöyle dedi:

Anlıyor musun, Izzy? Bu adam bize ticareti öğretecek!

 
Renat :

Lütfen "Yanıtla" özelliğini kullanın. Okumak çok rahatsız edici.

Alıntılanmış bir bloğu kırmak için imleci istediğiniz yere getirin ve "Düz Metin" stilini seçin veya Ctrl+1 tuşlarına basın.


Genel olarak, bu tür tavsiyelerle bitirmenizi öneririm - temelde ölümcüldürler, yanlış öncüllere dayanırlar ve uygulamalı bir dil için uygun değildirler.

Şaka olarak eski bir fıkra vardır:


Tamam, cani önkoşulların gerçek nedenlerini ve .net çerçevesinin size neden sıkışık olduğunu açıklamak istemiyorsanız, tartışma bitmiştir. Şaka ile ilgili olarak - kendinizi, manastırınızı ölçün.

5-ku'ya geçişten sonra geriye bakmamak için herkese iyi şanslar dilemeye devam ediyor.

 
Renat, makale için çok teşekkür ederim! Çok ilginç ve bilgilendirici. Maalesef MQL5DLL Test.mq5 betiğini uygulayamadım. Makalede yazıldığı gibi her şeyi yaptı. Ama senaryoyu çalıştırdığımda MT 5 bir enkaz gibi kapandı. Sorunun ne olduğunu bilmiyorum. Belki eksen yüzünden? MS Vista x64'üm var. Lütfen bir çözüm önerin :-)
 
denkir :
Renat, makale için çok teşekkür ederim! Çok ilginç ve bilgilendirici. Maalesef MQL5DLL Test.mq5 betiğini uygulayamadım. Her şeyi makalede yazıldığı gibi yaptı. Ama senaryoyu çalıştırdığımda MT 5 bir enkaz gibi kapandı. Sorunun ne olduğunu bilmiyorum. Belki eksen yüzünden? MS Vista x64'üm var. Lütfen bir çözüm önerin :-)

Yazının tamamını tekrar okuyun lütfen.

DLL içinde bir hata oluşturma (sıfır adreslere yazma) ile ilgili bir yer var ve daha sonra bu hatayı terminal tarafından düşürmeden yakalıyor. Çağrıyı fnCrashTest yöntemine yorumlamanız gerekir.

Bugün bu kodu Vista x64'te kontrol edeceğim - belki de bu bizim hatamız.

 
Renat писал(а) :

Yazının tamamını tekrar okuyun lütfen.

DLL içinde bir hata oluşturma (sıfır adreslere yazma) ile ilgili bir yer var ve daha sonra bu hatayı terminal tarafından düşürmeden yakalıyor. Çağrıyı fnCrashTest yöntemine yorumlamanız gerekir.

Bugün bu kodu Vista x64'te kontrol edeceğim - belki de bu bizim hatamız.

Evet, her şeyi dikkatlice ve bir kereden fazla okudum :-))

MQL5DLL Test.mq5 betiğindeki fnCrashTest(int arr) işlevini yorumladığımı söylemeyi unuttum. Ve hala kaza alıyorum. :-(

Bu böyle görünüyor. Yoksa dll kodundaki fnCrashTest(int arr) işlevini yorumlamam gerekir mi?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed( int &res1, double &res2);
void fnFillArray( int &arr[], int arr_size);
void fnReplaceString( string text, string from, string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) terminalin hangi sürümü 32 veya 64 bit?

2) dll'nin hangi sürümü 32 veya 64 bit?