スクリプト: WININET_TEST

 

WININET_TEST:

WININET_TEST.mq5 スクリプトは、MQL4.Codebaseのs_wininet.mq4を修正したバージョンです。

ライブラリwininet.dllを使って、オンラインからページ(ファイル)をダウンロードするシンプルな方法です。

機能させるには、 ターミナルのオプションの"Allow DLL imports"に忘れずにチェックしてください。


作者: MetaQuotes Software Corp.

 

読み込む前にファイルの長さを知ることは可能ですか?大容量で低速の場合、読み込まれたデータの割合を推定できるようにするためです。

 
gdtt:

読み込む前にファイルの長さを知ることは可能ですか?これは、大容量で低速の場合、ダウンロードされたデータのパーセンテージを推定できるようにするためです。

可能だと思います。msdnのwininet.dllの説明にあります。

 
gdtt:

読み込む前にファイルの長さを知ることは可能ですか?これは、大容量で低速の場合に、読み込まれたデータの割合を推定できるようにするためです。

GETリクエストの前に/HEADを送る
 
sergeev:

それはできると思います。msdnのwininet.dllの説明にもあります。


wininet.dllの使用 法を完全に開示した記事の良いトピックになると思います。

 
大賛成だ! とても役に立つ記事になるだろう。
 
gdtt:

読み込む前にファイルの長さを知ることは可能ですか?これは、大容量で低速の場合、ダウンロードされたデータのパーセンテージを推定できるようにするためです。

サーバーがコンテンツの長さを報告する 可能性はあります。

リクエストに関する情報を取得するには、wininet.dll のHttpQueryInfo 関数を使用します。この関数は、指定した配列に必要な情報を文字列形式で返します。

使用例

を #import セクションに追加します:

int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);

を追加します。

#define HTTP_QUERY_CONTENT_LENGTH 5

を追加し、InternetOpenUrlWを呼び出してhURLを取得した後のコードに、コードを追加する必要があります:

   int BufLen=2048;
   int ind=0;
   uchar buf0[2048];
   string s="";
   int ContentSize_HttpQueryInfoW=0;
   int iRes;
   
   iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind);
   if(iRes<=0)
     {
      Print("Error in call of HttpQueryInfoW()");
     }
   else
     {
      s="";
      for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);}
      Print("HTTP_QUERY_CONTENT_LENGTH:",s);
      if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s);
      Alert(「コンテンツサイズ=",ContentSize_HttpQueryInfoW);
     }     

yandex.ruからのテスト例では、"Content size= 44649 "となり、これはダウンロードされたファイルのサイズに対応します。

 

現行バージョンのスクリプトにこの機能を追加した。

 

ご苦労様でした!

完璧です!

 

実行しようとするとメタトレーダーが致命的なエラーで閉じてしまいます。何か解決策はありますか?

 
最後のMT5アップデートの前に、wininetが動作することがわかりました。この問題を克服する方法を見つけたら教えてください。