Kütüphaneler: Bellek Eşleme

 

Bellek Eşleme:

DLL (VC++ 2010 projesi) Bellek Eşleme ile çalışmak için.

Author: ---

 

Birisi için faydalı olabilir:

Alternatif olarak, bir RAM diski oluşturabilir ve dosyaları buraya yerleştirebilirsiniz. Ram disk, bilgisayarınızın RAM'inde bulunan sanal bir disktir.

Ram disk oluşturmak için böyle bir yazılım kullanıyorum http://ramdisk.nm.ru/ramdiskent-rus.htm

 

Keşke hepsi MQL'e yazılabilseydi, böylece dll olmadan kullanılabilseydi.

Teşekkürler Alex, harika şeyler.

 
Urain:

Tüm bunlar MQL'de uygulanabilseydi güzel olurdu, böylece dll olmadan kullanılabilirdi.

Ne yazık ki, tüm sorun tek bir fonksiyonda yatıyor - MapViewOfFile. Bir işaretçi döndürüyor, bu yüzden onu doğrudan MQL'de kullanamazsınız ... bir diziye işaretçi getiremezsiniz.

Diğer tüm fonksiyonlar (sadece 4 tane var -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) çağrılabilir.
ama sadece bu MapViewOfFile, MQL'den doğrudan eşleme ile tamamen işlevsel bir çalışma yaratma fırsatı vermedi. ve bu üzücü, ben de bunu kendi yazdığım bir DLL olmadan yapmayı gerçekten istedim.

 
sergeev:

Ne yazık ki, tüm sorun tek bir fonksiyonda yatıyor - MapViewOfFile. Bir işaretçi döndürüyor, bu yüzden onu doğrudan MQL'de kullanamazsınız... bir diziye işaretçi getiremezsiniz.

Diğer tüm fonksiyonlar (sadece 4 tane var -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) çağrılabilir.
ancak sadece bu MapViewOfFile, MQL'den doğrudan eşleme ile tam işlevsel bir çalışma oluşturma fırsatı vermedi. ve bu üzücü, ben de gerçekten kendi yazdığım bir DLL olmadan yapmak istedim.

Aslında mesaj size değil, MQ geliştiricilerine idi, sorun eski ve çözümü açıkça talep ediliyor.

ZY Benzer amaçlar için olay yoluyla diziye işaretçi geçirme işlevleri yazdım (ancak bir MT içinde), ancak dll'deki işlevler tek satır olmasına rağmen dll olmadan da çalışmadı.

 
Urain:

Aslında mesaj size değil, MQ geliştiricilerine idi, sorun eski ve çözümü açıkça talep ediliyor.

Evet, ihtiyaç duyulan şey ihtiyaçtır.

Hiç bir dönüştürücü işlevi oluşturmak için bir şey yaptınız mı?

Örneğin, bazı dll fonksiyonları bir işaretçi döndürür, bu yüzden int(4) var. Çoğu durumda bu, bazı yapılara bir işaretçi olacaktır.

Ve bir sonraki görev bu yapıdan veri çekmektir. Yapının boyutunu biliyoruz, bu nedenle önce bu işaretçiyi bir char dizisine bir işaretçiye çevirebiliriz.

İşte bir soru - bu yeniden atama nasıl yapılır? Nasıl hile yapılır? Belki de işaretçinin geçeceği bir ara dll işlevi aracılığıyla ve bu char dizisini döndürecektir?
Peki, ve sonra bu char dizisi basit = yapımıza aktarılır.

İşte dll'de böyle bir işlevin bir çeşidi

void Convert(char *_in, char *_out) { _out=_in; }

ve mql'den şu şekilde çağrılır

// örneğin api fonksiyonu bir veri yapısına işaretçi döndürdü
int ptr=ФункцияИзАпи(); // işaretçisi ДанныеИзАпи

struct ДанныеИзАпи
{
  // api'den veri yapısı 16 bayt
};

struct refData
{
 char byte[16]; // aynı yapının görüntüsü, ayrıca = 16 bayt 
};

refData ref;

Convert(ptr, ref.byte); // işaretçiyi diziye çevirdi

ДанныеИзАпи data=ref; // yapının alanlarını basit kopyalama ile doldurun

Not:
memcpy ile bir fikir buldum. o da pointer ile kopyalıyor. şimdi denemeliyim.
 
evet. memcpy çalışır ! ve strcpy ile birlikte dizeleri bile doğru şekilde işlemek mümkündür

böylece doğrudan çalışabilir!!!!
 

MK'nın lehine bir taş daha.

Neden bu kadar oyalanıyorlar?

Kendi programları gerçekten yüzü bozabilir mi?

 
Urain:

Aslında bu size karşı bir taş değil, mesaj MQ geliştiricilerine idi, sorun eski ve çözümü belli ki talep görüyor.

Sonuç olarak her şey yolunda, sorun çözüldü, kendi yazdığım DLL'i kullanmadan MQL5 için incil başarıyla yapıldı ve test edildi.

Yayınlanması için çoktan gönderdim :)

 
her.human:

MK'nın lehine bir taş daha.

Neden bu kadar oyalanıyorlar?

Kendi programları gerçekten yüzü bozabilir mi?

MQ5/EX5 programları çok kolay dağıtılabilir ve sıkı güvenlik kontrolü olmadan kullanıcılara onarılamaz zararlar verebilir.

Bu nedenle MQL5 uygulama dili, tehlikeli işlevleri çağırma yeteneği olmadan ve kendi kum havuzunda çalışarak korumalı olarak oluşturulmuştur. İşlevselliği genişletmek için DLL kütüphaneleri ile entegrasyon vardır.

 
Renat:

MQ5/EX5 programlarının dağıtımı çok kolaydır ve sıkı güvenlik kontrolü olmadan kullanıcılara onarılamaz zararlar verebilir.

Bu nedenle MQL5 uygulama dili, tehlikeli işlevleri çağırma yeteneği olmadan ve kendi sanal alanında çalışarak korunacak şekilde tasarlanmıştır. İşlevselliği genişletmek için DLL kütüphaneleri ile entegrasyon vardır.

Market ne olacak?

Yoksa win dll'lerine pazarda izin verilecek mi?

Genel olarak cevabı biliyorum, bu yüzden bu uygulamayı MQL5 standardında yapmayı önerdim.