エキスパート: 相場モニタリング(メモリマップファイル) - ページ 2

 
sergeev:

1) サーバーだけがメモリーを変更する権利を持っている。

2)-Pipeを見て ください。そこでは、データ到着の「イベント」は自明なものとして実装されています。

3)そう、サーバーを書くかMSDNからコピーする必要があるが、MQL5では既製のクライアントを直接使うことができる。

4)残念ながら、ポーリングの周期性でこの問題を解決することはできません。 Sleep(1)はメモリで動作しているときでもノイズを発生させるべきではありません。 関数のタイミングをチェックする必要があります。もしかしたら、どこかに余分なパスやロードがあるかもしれません。

1 - サーバーだけ(あなたの仕事から私が書いた)

2 - 興味深い、私はデータ4(8)バイト、すなわち全サイクルを転送するために "できるだけタイムリーに "タスクを持っている(非常に頻繁に実行する必要があります)だけ見ていきます。

3 - 私は記事との類推によって、私は自分自身を作ると思うが、今のところ問題さえテスト例が動作しません。

4 - はい、私はコードを最適化し、いくつかのことを書き直した、それはより良いようです。

 

あなたのdllをmt4に追加してみました。

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.
コードは以下の通りです。
#include <stdlib.mqh>

#define modeOpen                                                        0 // オープンフラグ
#define modeCreate                                                      1 // 作成フラグ

#import "MemMap32.dll"
int MemOpen(string path,int size,int mode,int &err); // メモリ内でファイルをオープン/作成し、ハンドルを取得する。
void MemClose(int hmem); // メモリ内のファイルを閉じる
int MemGrows(int hmem,string path,int newsize,int &err); // メモリ内のファイルサイズを増やす
int MemWrite(int hmem,int &v[], int pos, int sz, int &err); // int(4) ベクトル v を指定された位置 pos, size sz からメモリに書き込む。
int MemRead(int hmem, int &v[], int pos, int sz, int &err); // 指定された位置posからベクトルvをサイズszで読み込む

#import


int hmem,err; // 
string file; // メモリ内のファイル名


int init()
   {
   file="Local\\123"; // メモリ内のファイル名

   hmem=MemOpen(file,-1,modeOpen,err); // 既存のファイルを開く
   if(hmem>0) // 開かれた場合
     {
      Print("open OK h="+hmem);
     }
   else
   if(err==-2) // 開かれていない場合
     {
      Print("-err("+err+") memfile not found.");

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

ドライバーを右に 回す

 
sergeev:

ドライバーを正しく 回す

リンク先の例では、MemMap.dllを使用しています。

そこにはありません。MEmMap32.dllです。

mt5では動作しますが、mt4ではファイルが見つかりません。

errは配列であるべきでした。

 
これを回避する方法を教えてください。
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'

ターミナルmt5のx64バージョンはサーバーに自動的にインストールされます。

私のラップトップにはWin7x64がありますが、通常の32ビット版のターミナルがあり、x64にアップデートしようとしません。