MQL5で学び、共に書く - ページ 5

 
maxandsoft :

ポイントは、デバッグ中にコンパイルすると、エラーも出ずにMQLエディタに戻されてしまうことです。また、EAをチャートに引っ張っただけでは、チャートにすら表示されません。 つまり、デバッグしてもEAを起動しても、どこにもエラーは出ないのです。


エラーを見つけたのですが、DLLが許可されていない、つまり見あたらないということです。問題は、それがどこにあるべきかということです。(バージョン4では、どこにも上書きする必要はなく、デフォルトでWindowsのSystemsフォルダにありました)。

 
maxandsoft   :


しかし、DLLが許可されていない、つまり、それを見ることができないというエラーを見つけました。問題は、それをどこに配置するかです。(バージョン4では、どこにも上書きする必要はなく、デフォルトでWindowsのSystemsフォルダにありました)。

DLLからのインポートを 許可してみる


 

良いコンパイラと悪いコンパイラの違いは、それを使って実行可能なコードから実行不可能なコードを淘汰できるかどうかだと思うんです。そして、これが最大のポイントです。息を呑むような、技術的に存在しないものに出会うことが多いのです。それが言語の表現手段の発展や洗練に寄与しているのです。また、どのような形式でデータを入力するかで悩むとしたら、それはコンパイラではなく、 ...MQL5のコンパイラは、プログラムのインターフェイスに劣らず、改善が必要だと思います。

 
Rosh   :

DLLからのインポートを許可してみる

さて、このように書かれています。

2010.01.14:27:56 GetInternet (EURJPY,H1) Access violation read to 0x00040017 in 'C:\UsersFujitsuAppData↩Roaming↪MetaQuotes↩Terminal₎D0E8209F77C8CF37AD8BF550E51FF075↪MQL5↩Libraries↪Method.dll'

 
maxandsoft   :

さて、このように書かれています。

2010.01.14:27:56 GetInternet (EURJPY,H1) Access violation read to 0x00040017 in 'C:\UsersFujitsuAppData↩Roaming↪MetaQuotes↩Terminal₎D0E8209F77C8CF37AD8BF550E51FF075↪MQL5↩Libraries↪Method.dll'

ソースコードを添付してください。プライベート メッセージとして送信可能です。
 
mql5   :

ソーステキストを添付してください。プライベートメッセージとして送信可能です。

//+------------------------------------------------------------------+
//|                                                  GetInternet.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#import "wininet.dll"
  int InternetAttemptConnect (int x);
  int InternetOpenA(string sAgent, int lAccessType, 
                    string sProxyName = "", string sProxyBypass = "", 
                    int lFlags = 0);
  int InternetOpenUrlA(int hInternetSession, string sUrl, 
                       string sHeaders = "", int lHeadersLength = 0,
                       int lFlags = 0, int lContext = 0);
          
  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, 
                       int& lNumberOfBytesRead[]);
  int InternetCloseHandle(int hInet);



#import
input int Step = 300;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("Старт...");
   

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    Comment(GetURL("http://www.forexremote.net"));
    
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------------------------------------+
//| Функция получения WEB страницы                                                                           |
//+----------------------------------------------------------------------------------------------------------+
string GetURL(string url)
{
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return("");
     }

   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 1, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return("");         
     }

   int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
   if(hURL <= 0)
    {
       Print("Ошибка получения данных с узла!");
       //fComment("Ошибка получения данных с узла!",true);
       InternetCloseHandle(hInternetSession);
       return("");         
     } 
          
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
              text = text + CharToString(cBuffer[i] & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
              text = text + CharToString(cBuffer[i] >> 8 & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
           text = text + CharToString(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToString(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
       //Sleep(500);

     }
     InternetCloseHandle(hInternetSession);
     return(TXT);
}
//+----------------------------------------------------------------------------------------------------------+
//| Конец Функции получения WEB страницы                                                                     |
//+----------------------------------------------------------------------------------------------------------+
 
maxandsoft:
さて、このように書かれています。

2010.01.14:27:56 GetInternet (EURJPY,H1) Access violation read to 0x00040017 in 'C:\UsersFujitsuAppData↩Roaming↪MetaQuotes↩Terminal₎D0E8209F77C8CF37AD8BF550E51FF075↪MQL5↩Libraries↪Method.dll'

メッセージありがとうございました!不具合は修正されました。アップデートを待つ。
 

其のビルド239でエラーはなくなりましたが、まだまだです...。

2010.01.14 23:55:33 GetInternet (USDJPY,H1) ノードからのデータ取得でエラー!

結果的には、後者の理由は関数で、ユニコードに置き換えることで

InternetOpenW()およびInternetOpenUrlW()

若干※解決したのですが...。

ただ、Expert Advisorは使わず、スクリプトとしてコードを修正しました。


*わずかに、サイトのytf-8エンコーディングを打ち負かすために残っていただけです。

<th width="50">&nbsp;ÐЎÐÐÑœ;</th> </nbsp> <th width="40">&nbsp;ÐЎÐÑœ;</th>&nbsp;ÐЏÐÑœ;</th

 
kombat:

其のビルド239でエラーはなくなりましたが、まだまだです...。

2010.01.14 23:55:33 GetInternet (USDJPY,H1) ノードからのデータ取得でエラー!

結果的には、後者の理由は関数で、ユニコードに置き換えることで

InternetOpenW()およびInternetOpenUrlW()

若干※解決したのですが...。

ただ、Expert Advisorは使わず、スクリプトとしてコードを修正しました。


*わずかに、サイトのytf-8エンコーディングを打ち負かすために残っていただけです。

<th width="50">&nbsp;PЎѕÐsбÑbsp;</th><br> <th width="0">&nbsp;PЎѕsÐsÐ</h>&nbsp;PЏЎѕsÐÐ</h

 
maxandsoft:
新装開店を待つ