ライブラリ: DLLなしでのファイルマッピング - ページ 5 123456789101112 新しいコメント --- 2013.01.06 10:25 #41 baramantan:私はメガ・プログラマーではない。しかし、どこに普遍性があるのか理解できない:ucharは正の値にしか使えない。最小値は0、最大値は255だ。ucharの値を超えるデータは、ucharの最大値または最小値と等しくなる。ということを踏まえて、最初から「intやdoubleの渡し方」を聞いているのです。ついていけませんよ、部長。では、少し説明しよう。1.charと ucharを 例にとると、どちらも1 バイトの変数である。つまり、互いに代入し合うことでバイト数を失うことはなく 、したがって元のデータの値を失うことも ない。次の式を見てください。uchar u=200; char c=u; u=c; Print(u); c=-100; u=c; c=u; Print(c);long/ulong、int/uintについても 同じことが言える。つまり、同じバイト数の整数型の変数同士は、バイト数の情報を失うことなく渡すことができる。ちなみに、Expert AdvisorはMAGICの数値をulong型で受け取りますが、プログラムでは常にlong型、つまり符号付き形式で設定したり読み取ったりすることができます。 2. 次に<some_type> と uchar を見てみよう。 例えばint型。sizeof(int)でご存知のように、これは4 バイトのサイズを持っています。 これは、メモリ上のこれらの4バイトはuchar[4] 配列として簡単に表現できることを意味します。 もしdouble (8 バイトです)があれば、それはuchar[8] 配列として表現できます。 これは文字列のバイトにも当てはまります。MQLではushort配列です。 よく、それに応じて、任意の型の構造体があれば、uchar配列として簡単にデータを提供することができます。MQL5バージョン、メモリ上の仮想ファイルCFastFileで 使用されているのは、バイトに関するこれらの基本概念です。uchar配列のメモリに任意のデータを格納します。つまり、外部のプログラムとデータを交換する必要がない場合です。あるいは、データ・ストリームの形で他のプログラムからデータを受け取る場合、例えばインターネット・ページの読み込みなど、このデータをディスクに保存する必要がない場合は、Windowsマッピングの代わりにCFastFileを 使用する方がよいでしょう。そして最後に、https://www.mql5.com/ja/articles/364。 リプレイシステムの開発 市場シミュレーション(第3回):設定の調整(I) 初心者からプロまでMQL5をマスターする(第2回):基本的なデータ型と変数の使用 MetaTrader 4でMQL5ウィザードの既製エキスパートアドバイザーが機能 --- 2013.03.03 13:18 #42 BoraBo:MT5 642 Win7 64は、私が理解する限りでは、次の後に動作しません。hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // メモリオブジェクトを作成する。 エラー1400が出る、しかし、Vista 32は動作します。これは、32システムと64システムでポインタのサイズが異なるためです。このライブラリファイルは32ビット端末用に作られています。しかし、64ビット端末を使用する場合は、ポインタが暗示されるすべての場所(たとえばPBYTE、LPVOIDなど、およびすべてのmemcpy型)に8バイト長型を置く必要があります。 Alexey Klenov 2013.08.27 08:01 #43 しかし、どのように私は接続する#include <MemMapLib.mqh> #include <Trade\Trade.mqh> を出します。'GetLastError' - ambiguous call to overloaded function with the same parameters SymbolInfo.mqh 718 10 'GetLastError' - ambiguous call to overloaded function with the same parameters SymbolInfo.mqh 725 57 そして、この2つのインクルードは、互いに関係なく機能する。 --- 2013.08.27 08:14 #44 olyakish:しかし、どのように私は接続するそれはそして、この2つのインクルージョンは互いに関係なく機能する。 文脈解決を使用してみてください: Alexey Klenov 2013.08.27 08:57 #45 sergeev: 文脈解決を使用してみてください:ありがとうただ、標準ライブラリを 修正する必要があったんだ。//+------------------------------------------------------------------+ bool CSymbolInfo::CheckMarketWatch(void) { //--- MarketWatchでシンボルが選択されているかチェックする。 if(!Select()) { if(::GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) { printf(__FUNCTION__+": Unknown symbol '%s'",m_name); return(false); } if(!Select(true)) { printf(__FUNCTION__+": Error adding symbol %d",::GetLastError()); return(false); } } //--- 成功 return(true); } //+------------------------------------------------------------------+ それがいいことだとは思わないけど......。 --- 2013.08.27 09:14 #46 olyakish:ありがとう。ただ、標準ライブラリを 修正する必要があったんだ。 それがいいことだとは思わない。あなたはわかっていない。私はkernel32::GetLastErrorについて お話ししました。 それが私のコードでどのように実装されているか見てください。このオプションに満足できないなら、例えばintパラメータで kernel32 GetLastErrorからの importを宣言すればいい。 Alexey Klenov 2013.08.27 09:22 #47 sergeev:あなたは理解していない。kernel32::GetLastErrorについて お話ししましたが、私のコードでどのように実装されているか見てください。このオプションがあなたに合わない場合は、例えばintパラメータで kernel32 GetLastErrorからの importを宣言してください。おそらく私はそれを正しく述べていない。しかし、我々は標準ライブラリを 変更するかを変更するか、あるいはあなたのライブラリのどこを変更するかです。というのも、ここにあなたのコードに標準ライブラリを追加した例があるからです。//+------------------------------------------------------------------+ //|メモマップ //| 著作権 © 2006-2013, FINEXWARE Technologies GmbH | 著作権 © 2006-2013, FINEXWARE Technologies GmbH | その他 //|www.FINEXWARE.com //| プログラミングと開発 - Alexey Sergeev, Boris Gershanov|アレクセイ・セルゲーエフ、ボリス・ゲルシャノフ //+------------------------------------------------------------------+ #property copyright "著作権 © 2006-2013, FINEXWARE Technologies GmbH" #property link "www.FINEXWARE.com" #property version "1.00" #include <MemMapLib.mqh> #include <Trade\Trade.mqh> //------------------------------------------------------------------ OnStart void OnStart() { CMemMapFile hmem; long err=hmem.Open("Local\\test",111,modeCreate); uchar data[]; StringToCharArray("Hello from MQL5!",data); err=hmem.Write(data,ArraySize(data)); ArrayInitialize(data,0); hmem.Seek(0,SEEK_SET); err=hmem.Read(data,ArraySize(data)); Print(CharArrayToString(data)); hmem.Close(); } コンパイルすると同じエラーが出ます。 --- 2013.08.27 10:11 #48 オリャキッシュ、私があなたに書いた文章をもう一度よく読んでください。文脈に納得がいかないのなら、私が言いたいことを正確に伝えている。 "あるいは、あなたのライブラリーのために何を変えるべきか"。 Mykola Demko 2013.08.27 16:15 #49 sergeev:あなたは理解していない。kernel32::GetLastErrorについて お話ししましたが、私のコードでどのように実装されているか見てください。このオプションがあなたに合わない場合は、例えばintパラメータで kernel32 GetLastErrorからの importを宣言してください。コード内のコンテキストでkernel32::GetLastErrorを 呼び出すと、コンパイラは コンテキストなしでGetLastErrorを呼び出します。プログラマーは、標準的なWinAPI関数のMQLアナローグをコンテキスト付きで呼び出すことをルール化すればよいのです。そうすれば、その後の修正に問題は生じない。そして、標準バイブルを修正し、それが更新されるので、また編集しなければならない。 TheXpert 2013.08.27 16:36 #50 Urain:それで、標準的な聖書を修正すれば更新される。 標準的なものは標準的なものだから、そこですることは何もない。エラーが発生したら、開発者に報告してください。他に方法はない。 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私はメガ・プログラマーではない。しかし、どこに普遍性があるのか理解できない:ucharは正の値にしか使えない。最小値は0、最大値は255だ。
ucharの値を超えるデータは、ucharの最大値または最小値と等しくなる。
ということを踏まえて、最初から「intやdoubleの渡し方」を聞いているのです。ついていけませんよ、部長。
では、少し説明しよう。
1.charと ucharを 例にとると、どちらも1 バイトの変数である。
つまり、互いに代入し合うことでバイト数を失うことはなく 、したがって元のデータの値を失うことも ない。
次の式を見てください。
long/ulong、int/uintについても 同じことが言える。
つまり、同じバイト数の整数型の変数同士は、バイト数の情報を失うことなく渡すことができる。
ちなみに、Expert AdvisorはMAGICの数値をulong型で受け取りますが、プログラムでは常にlong型、つまり符号付き形式で設定したり読み取ったりすることができます。
2. 次に<some_type> と uchar を見てみよう。
例えばint型。sizeof(int)でご存知のように、これは4 バイトのサイズを持っています。 これは、メモリ上のこれらの4バイトはuchar[4] 配列として簡単に表現できることを意味します。
もしdouble (8 バイトです)があれば、それはuchar[8] 配列として表現できます。
これは文字列のバイトにも当てはまります。MQLではushort配列です。
よく、それに応じて、任意の型の構造体があれば、uchar配列として簡単にデータを提供することができます。
MQL5バージョン、メモリ上の仮想ファイルCFastFileで 使用されているのは、バイトに関するこれらの基本概念です。uchar配列のメモリに任意のデータを格納します。
つまり、外部のプログラムとデータを交換する必要がない場合です。あるいは、データ・ストリームの形で他のプログラムからデータを受け取る場合、例えばインターネット・ページの読み込みなど、このデータをディスクに保存する必要がない場合は、Windowsマッピングの代わりにCFastFileを 使用する方がよいでしょう。
そして最後に、https://www.mql5.com/ja/articles/364。
MT5 642 Win7 64は、私が理解する限りでは、次の後に動作しません。
hmem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size+HEAD_MEM,path); // メモリオブジェクトを作成する。
エラー1400が出る、
しかし、Vista 32は動作します。
これは、32システムと64システムでポインタのサイズが異なるためです。
このライブラリファイルは32ビット端末用に作られています。
しかし、64ビット端末を使用する場合は、ポインタが暗示されるすべての場所(たとえばPBYTE、LPVOIDなど、およびすべてのmemcpy型)に8バイト長型を置く必要があります。
しかし、どのように私は接続する
を出します。
そして、この2つのインクルードは、互いに関係なく機能する。
しかし、どのように私は接続する
それは
そして、この2つのインクルージョンは互いに関係なく機能する。
文脈解決を使用してみてください:
ありがとう
ただ、標準ライブラリを 修正する必要があったんだ。
それがいいことだとは思わないけど......。ありがとう。
ただ、標準ライブラリを 修正する必要があったんだ。
それがいいことだとは思わない。あなたはわかっていない。
私はkernel32::GetLastErrorについて お話ししました。 それが私のコードでどのように実装されているか見てください。
このオプションに満足できないなら、例えばintパラメータで kernel32 GetLastErrorからの importを宣言すればいい。
あなたは理解していない。
kernel32::GetLastErrorについて お話ししましたが、私のコードでどのように実装されているか見てください。
このオプションがあなたに合わない場合は、例えばintパラメータで kernel32 GetLastErrorからの importを宣言してください。
おそらく私はそれを正しく述べていない。
しかし、我々は
というのも、ここにあなたのコードに標準ライブラリを追加した例があるからです。
コンパイルすると同じエラーが出ます。
オリャキッシュ、私があなたに書いた文章をもう一度よく読んでください。
文脈に納得がいかないのなら、私が言いたいことを正確に伝えている。
あなたは理解していない。
kernel32::GetLastErrorについて お話ししましたが、私のコードでどのように実装されているか見てください。
このオプションがあなたに合わない場合は、例えばintパラメータで kernel32 GetLastErrorからの importを宣言してください。
コード内のコンテキストでkernel32::GetLastErrorを 呼び出すと、コンパイラは コンテキストなしでGetLastErrorを呼び出します。
プログラマーは、標準的なWinAPI関数のMQLアナローグをコンテキスト付きで呼び出すことをルール化すればよいのです。そうすれば、その後の修正に問題は生じない。
そして、標準バイブルを修正し、それが更新されるので、また編集しなければならない。
それで、標準的な聖書を修正すれば更新される。