Uzman Danışmanlar: Tekliflerin izlenmesi (haritalama için örnek) - sayfa 2

 
sergeev:

1) sadece sunucunun hafızayı değiştirme hakkı vardır. istemciler onu okur.

2)- Pipe'a bakın. orada veri varışının "olayları" kendi kendini açıklayıcı olarak uygulanmaktadır - veriniz var, onu alıyoruz, onu bekliyoruz.

3)- evet, bir sunucu yazmanız veya MSDN'den kopyalamanız gerekecek, ancak hazır istemciler doğrudan MQL5'te kullanılabilir.

4) maalesef bu sorunu yoklama periyodu ile çözemezsiniz. Sleep(1) bellek ile çalışırken bile ses çıkarmamalı. fonksiyonların zamanlamasını kontrol etmelisiniz, belki bir yerlerde ekstra geçişler ve yük vardır.

1 - sadece bir sunucu (sizin çalışmanızdan yola çıkarak benim tarafımdan yazılmıştır)

2 - ilginç, bakacağım sadece 4(8) baytlık veriyi, yani tüm döngüyü aktarmak için "mümkün olduğunca zamanında" bir görevim var (çok sık yapılmalıdır)

3 - Sanırım makaleye benzeterek kendiminkini yapacağım, ancak şu ana kadar sorun test örneği bile çalışmıyor.

4 - evet, bazı şeyleri yeniden yazdım, kodu optimize ettim, daha iyi görünüyor.

 

Dll'inizi mt4'e eklemeye çalıştım.

2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: -unknow err(0)  h=0
2013.04.01 00:03:49     _tradeBuySell_mt4 GBPCHF,H1: function 'MemOpen' call from dll 'MemMap32.dll' critical error c0000005 at 666013E6.
İşte kod
#include <stdlib.mqh>

#define modeOpen                                                        0 // açık bayrak
#define modeCreate                                                      1 // oluşturma bayrağı

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // bellekte dosya aç/oluştur, tanıtıcı al
void MemClose(int hmem); // bellekteki dosyayı kapatın
int MemGrows(int hmem,string path,int newsize,int &err); // bellekteki dosyanın boyutunu artır
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // int(4) vektör v'yi belirtilen konum pos, boyut sz'den belleğe yaz
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // v vektörünü belirtilen pos konumundan sz boyutuyla oku

#import


int hmem,err; // 
string file; // bellekteki dosya adı


int init()
   {
   file="Local\\123"; // bellekteki dosya adı

   hmem=MemOpen(file,-1,modeOpen,err); // mevcut bir dosyayı aç
   if(hmem>0) // eğer açılmışsa
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // açılmamışsa,
     {
      Print("-err("+err+") memfile not found.");

     }
   else
     {
      Print("-unknow err("+err+")  h="+hmem);
      return(0);
     }
   Print("OK ("+err+") h="+hmem);   
 
      return(0);
   }
 

tornavidayı sağa çevirin

 
sergeev:

tornavidayı doğru şekilde çevirin

Bağlantıdaki örneğiniz MemMap.dll kullanıyor

Orada değil, MEmMap32.dll.

mt5'te çalışıyor, ancak mt4'te dosyayı bulamıyor.

Başlangıçta yanlış beyan edilmiş err bir dizi olmalıydı, bunun için teşekkürler

 
Bunu nasıl atlatacağımı söyleyebilir misiniz?
OK      1       01:10:31        tradeBuySell    'D:\MT5******\MQL5\Libraries\MemMap32.dll' is not 64-bit version
JF      1       01:10:37        tradeBuySell (GBPUSD,H1)        Cannot load 'D:\******\MQL5\Libraries\MemMap32.dll'

Terminal mt5'in x64 sürümü otomatik olarak sunucuya yükleniyor.

Dizüstü bilgisayarımda Win7x64 var, ancak terminalin normal 32 bit sürümü var ve kendisi x64'e güncellemeye çalışmıyor.