ライブラリ: DLLなしでのファイルマッピング - ページ 3 12345678910...12 新しいコメント --- 2012.01.16 19:25 #21 Urain: 何か保証されたテストをしなければならないと思う。でも、まだ方法がわからない。論理的に言えば、ハンドルを閉じるとメモリ領域が解放される。しかし、ハンドルを閉じたからといって、その領域がゼロになるわけではない。 ハンドルが閉じられても、他のソフトウェアによって上書きされるまでは、書き込まれたデータは残っている。 Andrey Dik 2012.01.16 19:26 #22 sergeev: 中間データの保存にファイルを使うのであれば、もちろん可能だ。 重要なのは、何らかの基準点でデータをディスクにリセットすることである。もし何かが起これば、情報は回復不能なほど失われてしまうからだ。 もし "何か "が起これば、いずれにせよ実際の情報は失われる。中間結果は、定期的に鉄道上のファイルにダンプすることができる。 Mykola Demko 2012.01.16 19:34 #23 sergeev:論理的に言えば、ハンドルを閉じればこのメモリ領域は解放される。しかし、ハンドルを閉じたからといって、この領域がゼロになるわけではない。 ハンドルが閉じられても、他のソフトウェアによって上書きされるまでは、書き込まれたデータは残っている。ファイルが閉じられ、ハンドルが破壊され、同じ名前のファイルを開いて 必要な情報を読み込む。しかし、分散された領域は失われ、破壊されたファイルを作成せずに開くとエラーになるはずだ。これがバグなのか機能なのかはわからない。#include <MemMapLib.mqh> //+------------------------------------------------------------------+ //| スクリプト番組開始機能| //+------------------------------------------------------------------+ void OnStart() { CMemMapFile *hmem=new CMemMapFile(); int err=hmem.Open("Local\\test",111,modeCreate);// ファイルを作成する uchar data[]; int sizedata=StringToCharArray("Hello from MQL5!",data); err=hmem.Write(data,sizedata); // と書く。 ArrayInitialize(data,0); CMemMapFile hm; err=hm.Open("Local\\test",111); // ファイルを作成せずに開く uchar nextdata[]; hm.Seek(0,SEEK_SET); err=hm.Read(nextdata,sizedata); // 読む Print(CharArrayToString(nextdata)); ArrayInitialize(data,0); err=hmem.Open("Local\\test",111); // ファイルを作成せずに開く hmem.Seek(0,SEEK_SET); err=hmem.Read(data,sizedata); // 読む Print("に",CharArrayToString(data)); hmem.Close(); delete hmem; // ファイルを閉じる hm.Close(); // ファイルを閉じる ArrayInitialize(data,0); err=hm.Open("Local\\test",111);Print("err=",err); hm.Seek(0,SEEK_SET); err=hm.Read(data,sizedata); Print("その後",CharArrayToString(data)); } //+------------------------------------------------------------------+ --- 2012.01.16 19:51 #24 Urain:分散された領域は失われ、破壊されたファイルを作成せずに開くとエラーになるはずだが。バグだと思う。仕掛けは、メモリ上にファイル名があること。そしてシステムはそれを検出する。 --- 2012.01.17 10:53 #25 皆さん、お願いがあります。memcpy/strcpyが 使えないようなAPI関数を、Windows以外のAPIも含めて探してほしいのです。つまり、何らかの理由で返されるポインタのサイズがわからない場合、あるいは返される文字列がNULL終端でなくサイズがわからない場合を見つけたいのです。このメソッドの適用限界を見つけるのを手伝ってください。 Boris 2012.05.01 05:39 #26 MT5 642 Win7 64は、私が理解する限りでは、次の後に動作しません。hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // メモリオブジェクトを作成する。 エラー1400が出る、しかし、Vista 32は動作します。 --- 2012.05.01 09:42 #27 確認したところ、同じエラーが出た。しかし、=6. Boris 2012.05.01 11:28 #28 sergeev: 確認したところ、同じエラーが出た。しかし、=6.何かのトリックに違いない。直接起動するとerr=6になるが、デバッグモードではerr=1400になる。 Roman Ivanov 2013.01.02 16:17 #29 intまたはdouble配列を転送するには?私にはできません :( --- 2013.01.02 21:20 #30 baramantan: intまたはdouble配列を転送するには?私にはできません :( sizeof(<Type>)*<Number_Elements>のlong変数として扱えばうまくいく :) 12345678910...12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
何か保証されたテストをしなければならないと思う。でも、まだ方法がわからない。
論理的に言えば、ハンドルを閉じるとメモリ領域が解放される。
しかし、ハンドルを閉じたからといって、その領域がゼロになるわけではない。 ハンドルが閉じられても、他のソフトウェアによって上書きされるまでは、書き込まれたデータは残っている。
中間データの保存にファイルを使うのであれば、もちろん可能だ。 重要なのは、何らかの基準点でデータをディスクにリセットすることである。もし何かが起これば、情報は回復不能なほど失われてしまうからだ。
論理的に言えば、ハンドルを閉じればこのメモリ領域は解放される。
しかし、ハンドルを閉じたからといって、この領域がゼロになるわけではない。 ハンドルが閉じられても、他のソフトウェアによって上書きされるまでは、書き込まれたデータは残っている。
ファイルが閉じられ、ハンドルが破壊され、同じ名前のファイルを開いて 必要な情報を読み込む。しかし、分散された領域は失われ、破壊されたファイルを作成せずに開くとエラーになるはずだ。これがバグなのか機能なのかはわからない。
分散された領域は失われ、破壊されたファイルを作成せずに開くとエラーになるはずだが。
バグだと思う。
仕掛けは、メモリ上にファイル名があること。そしてシステムはそれを検出する。
皆さん、お願いがあります。
memcpy/strcpyが 使えないようなAPI関数を、Windows以外のAPIも含めて探してほしいのです。
つまり、何らかの理由で返されるポインタのサイズがわからない場合、あるいは返される文字列がNULL終端でなくサイズがわからない場合を見つけたいのです。
このメソッドの適用限界を見つけるのを手伝ってください。
MT5 642 Win7 64は、私が理解する限りでは、次の後に動作しません。
hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // メモリオブジェクトを作成する。
エラー1400が出る、
しかし、Vista 32は動作します。
確認したところ、同じエラーが出た。しかし、=6.
確認したところ、同じエラーが出た。しかし、=6.
何かのトリックに違いない。直接起動するとerr=6になるが、デバッグモードではerr=1400になる。
intまたはdouble配列を転送するには?私にはできません :(