記事"MQLのソケットの使用およびシグナルプロバイダになる方法"についてのディスカッション - ページ 2 12345678910 新しいコメント --- 2016.07.14 14:55 #11 Alexey Volchanskiy: ここは低レベルのネットワーク・プログラミングのためのフォーラムですか?))) この記事は新しい可能性を示すものであって、あなたの知識を試すものではありません。クライアント・サーバー・テクノロジーを次のような分野で学び、使いたいと考えている人。- コピー機- ニュースレター- シグナル配信- 取引情報の交換 彼はそれをメモして使う。しかし、あなたの場合はそうではない、ということで、遠慮なくスルーしてください。フラッドは削除します。 Denis Sartakov 2016.07.22 19:05 #12 o_O: この記事は、あなたの知識を試すものではなく、新たな可能性を明らかにするものです。クライアント・サーバー・テクノロジーを次のような分野で学び、使いたいと考えている人は、この記事を参考にしてほしい。- コピー機- ニュースレター- シグナル配信- 取引情報の交換 彼はメモを取り、それを使う。しかし、あなたの場合はそうではない、だから、遠慮なく通り過ぎてください。洪水は削除されます。よくできている、あの馬鹿馬鹿しいソケット構造体をMQLベースにマッピングするのは、非常に明快でわかりやすい。https://www.mql5.com/ja/articles/1361。も同じソケットのトピックだが、非常に面倒かもしれない、単純な作業であれば、著者の提案するアプローチの方が望ましいのだが...。著者に感謝します。 私にとっては、例えば、現在のプロジェクトに とても関係があるので、使わせてもらいます。 Dmitry Melnichenko 2016.07.28 15:28 #13 サードパーティのDLLを使わずにmql4で同じことができる可能性はありますか? --- 2016.07.28 16:49 #14 Dmitry Melnichenko: サードパーティのDLLを使わずにmql4で同じことをする方法はありますか?はい。記事にあるコードはすべてmql4でも同じように再現できます。 Dmitry Fedoseev 2016.07.28 17:56 #15 なぜ、このような深刻なトピックを共有する人がいると、これほどまでに懐疑的な意見が多いのか理解できない。誰かが知っていて、他の誰かがそれが何なのか気づいていないことに嫉妬しているのだろうか?特に今は、誰もがそのトピックを理解する機会があるのだから。 --- 2016.07.28 18:29 #16 Dmitry Fedoseev:なぜ、このような深刻なトピックを共有する人がいると、これほどまでに懐疑的な意見が多いのか理解できない。誰かが知っていて、他の誰かがそれが何なのか気づいていないことに嫉妬しているのだろうか?今は誰もがこの話題を理解する機会があるのだからなおさらだ。 発表は完全に書かれたものではなかった。人々は記事を読まず(いつものことだが、誰も説明書を読まない:)、1ページまるまるフラッドが出現した。私が、レビューする前に記事の全文を読むことが望ましいと一般的に説明するまでは。 pavlick_ 2016.09.02 19:04 #17 記事のコードは間違っている。構造体のアライメントをまったく考慮していない。// x86 typedef struct WSAData { ushort wVersion; // 2 ushort wHighVersion; // 2 char szDescription[256+1]; // 257 char szSystemStatus[128+1]; // 129 ushort iMaxSockets; // 2 ushort iMaxUdpDg; // 2 // アライメント4を取得するために挿入を+2する。 char *lpVendorInfo; // 4 }; // sizeof(WSAData) == 400 // x64 typedef struct WSAData { WORD wVersion; // 2 WORD wHighVersion; // 2 WORD iMaxSockets; // 2 WORD iMaxUdpDg; // 2 char *lpVendorInfo; // 8 char szDescription[WSADESCRIPTION_LEN+1]; // 257 char szSystemStatus[WSASYS_STATUS_LEN+1]; // 129 // +6 アライメントを得るために挿入する 8 }; // sizeof(WSAData) == 408 // あなたのmql構造 struct WSAData { WORD wVersion; // 2 WORD wHighVersion; // 2 char szDescription[WSADESCRIPTION_LEN+1]; // 257 char szSystemStatus[WSASYS_STATUS_LEN+1]; // 129 ushort iMaxSockets; // 2 ushort iMaxUdpDg; // 2 char lpVendorInfo[]; // x64で8、x86で4 }; // sizeof(WSAData) == 402(x64), 398(x86) x64における構造体のサイズは、ポインタのアラインメント==8という仮定に基づく理論計算である(8が最も可能性が高い。しかし、例えば、構造体内のalignof(double)は==4、外部は==8です。だから100%確実ではない)。しかし、仮に4であったとしても、x64での構造体のサイズは408ではなく404になります。いずれにせよ、x86でもx64でもWSDataのバッファはオーバーフローします。 記事を書く前に、最も簡単なsizeof()の計測を行い、コードが書かれているシステムのビット数を明示的に指定すべきです(システムの構造体を複製しているのですから)。私は構造体のアラインされていない初期アドレスについて話しているのではありません。コード全体をチェックしたわけではないので、もしかしたら他の構造体にも問題があるかもしれません。 ところで、もしMKLチームの誰かが「あなたのアドレスはすべてアンアラインドです」というメッセージを見たら、なぜでしょうか?最近のプロセッサは十分に賢いので、すべてのモデルがデータを読み取ることができます。性能低下という形で少額の費用が発生しますが、それ以上のことはありません(クラッシュするようなことはありません)。 pavlick_ 2016.09.02 19:20 #18 しかし、私は正しくありません。MQLでは、WSDataのサイズは必要以上に大きくなります(lpVendorInfo[]はポインタではなく、サイズが50前後の動的配列 です)。そのため、コードは正しく動作するはずです。しかし、これは偶然であり、幸運なことであって、正しい理論的仮定ではない。MKLの構造体そのものは有効ではありません。十分なサイズの配列を作成し、何も宣言しない方がよいでしょう。もしWSADatat wsdata int res=WSAStartup(MAKEWORD(2,2), &wsadata); // вместо char wsaData[]; ArrayResize(wsaData,sizeof(WSAData)); int res=WSAStartup(MAKEWORD(2,2), wsaData); と書いていたらエラーになっていただろう。 --- 2016.09.06 20:07 #19 はい、MQLでは構造体はhttps://www.mql5.com/ja/docs/basis/types/classes。WinSock2.hの内容から判断すると、WSAData構造体には#pragma pack(1)がないので、あなたが言ったようにそのサイズはμl以上かもしれません。しかし,何かが間違っているか,これらのデータがスタックを破壊していないかのどちらかだと言える.すべての方法を解明するのは良いことだ。 pavlick_ 2016.09.06 21:02 #20 そのスタイルで書き直せばいい:#define WSA_DATA_SZ 420 ... char wsaData[WSA_DATA_SZ]; int res=WSAStartup(MAKEWORD(2,2), wsaData); アラインメントやコンパイラが余分なバイトをどこに置くかなんて気にしなくていい。どうせどのフィールドにもアクセスしないのだから、構造体を宣言しようとするこの頭痛の種に何の意味があるのだろう? 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ここは低レベルのネットワーク・プログラミングのためのフォーラムですか?)))
クライアント・サーバー・テクノロジーを次のような分野で学び、使いたいと考えている人。
- コピー機
- ニュースレター
- シグナル配信
- 取引情報の交換
彼はそれをメモして使う。
しかし、あなたの場合はそうではない、
ということで、遠慮なくスルーしてください。
フラッドは削除します。
この記事は、あなたの知識を試すものではなく、新たな可能性を明らかにするものです。
クライアント・サーバー・テクノロジーを次のような分野で学び、使いたいと考えている人は、この記事を参考にしてほしい。
- コピー機
- ニュースレター
- シグナル配信
- 取引情報の交換
彼はメモを取り、それを使う。
しかし、あなたの場合はそうではない、
だから、遠慮なく通り過ぎてください。
洪水は削除されます。
よくできている、
あの馬鹿馬鹿しいソケット構造体をMQLベースにマッピングするのは、非常に明快でわかりやすい。
https://www.mql5.com/ja/articles/1361。
も同じソケットのトピックだが、非常に面倒かもしれない、
単純な作業であれば、著者の提案するアプローチの方が望ましいのだが...。
著者に感謝します。 私にとっては、例えば、現在のプロジェクトに とても関係があるので、使わせてもらいます。
サードパーティのDLLを使わずにmql4で同じことをする方法はありますか?
はい。記事にあるコードはすべてmql4でも同じように再現できます。
なぜ、このような深刻なトピックを共有する人がいると、これほどまでに懐疑的な意見が多いのか理解できない。誰かが知っていて、他の誰かがそれが何なのか気づいていないことに嫉妬しているのだろうか?
特に今は、誰もがそのトピックを理解する機会があるのだから。
なぜ、このような深刻なトピックを共有する人がいると、これほどまでに懐疑的な意見が多いのか理解できない。誰かが知っていて、他の誰かがそれが何なのか気づいていないことに嫉妬しているのだろうか?
今は誰もがこの話題を理解する機会があるのだからなおさらだ。
記事のコードは間違っている。構造体のアライメントをまったく考慮していない。
x64における構造体のサイズは、ポインタのアラインメント==8という仮定に基づく理論計算である(8が最も可能性が高い。しかし、例えば、構造体内のalignof(double)は==4、外部は==8です。だから100%確実ではない)。しかし、仮に4であったとしても、x64での構造体のサイズは408ではなく404になります。いずれにせよ、x86でもx64でもWSDataのバッファはオーバーフローします。 記事を書く前に、最も簡単なsizeof()の計測を行い、コードが書かれているシステムのビット数を明示的に指定すべきです(システムの構造体を複製しているのですから)。私は構造体のアラインされていない初期アドレスについて話しているのではありません。コード全体をチェックしたわけではないので、もしかしたら他の構造体にも問題があるかもしれません。ところで、もしMKLチームの誰かが「あなたのアドレスはすべてアンアラインドです」というメッセージを見たら、なぜでしょうか?最近のプロセッサは十分に賢いので、すべてのモデルがデータを読み取ることができます。性能低下という形で少額の費用が発生しますが、それ以上のことはありません(クラッシュするようなことはありません)。
しかし、私は正しくありません。MQLでは、WSDataのサイズは必要以上に大きくなります(lpVendorInfo[]はポインタではなく、サイズが50前後の動的配列 です)。そのため、コードは正しく動作するはずです。しかし、これは偶然であり、幸運なことであって、正しい理論的仮定ではない。MKLの構造体そのものは有効ではありません。十分なサイズの配列を作成し、何も宣言しない方がよいでしょう。もし
と書いていたらエラーになっていただろう。はい、MQLでは構造体はhttps://www.mql5.com/ja/docs/basis/types/classes。
WinSock2.hの内容から判断すると、WSAData構造体には#pragma pack(1)がないので、あなたが言ったようにそのサイズはμl以上かもしれません。
しかし,何かが間違っているか,これらのデータがスタックを破壊していないかのどちらかだと言える.
すべての方法を解明するのは良いことだ。
アラインメントやコンパイラが余分なバイトをどこに置くかなんて気にしなくていい。どうせどのフィールドにもアクセスしないのだから、構造体を宣言しようとするこの頭痛の種に何の意味があるのだろう?