関数 StrToTime がエラー 4051 を引き起こす

 

こんにちは。

ビルド>600のエディタは、関数StrToTimeが好きではありません。

この関数を呼び出すと、エラー4051が発生します。どうしたのでしょうか?

のコードはこちらです。

//+------------------------------------------------------------------+
//| test.mq4 |
//+------------------------------------------------------------------+

#property version "1.00"

//--- input parameters
input string TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
datetime xxxxx = StrToTime("21:45"); // makes no difference with TimeClose_ from the input
Print("error: "+GetLastError());
}
//+------------------------------------------------------------------+

チック 毎の結果です。

何が問題なのでしょうか?エディタ509でコンパイルすると、当然ながらエラーは発生しません。

 
kla-mue:

こんにちは。

ビルド>600のエディタは、関数StrToTimeが好きではありません。

この関数を呼び出すと、エラー4051が発生します。どうしたのでしょうか?

コードはここにあります。

<deleted>

SRCボタンを使って、コードを投稿してください。
 

OK、これでわかったわ...次は...。

私の問題に対する解決策はあるのでしょうか?

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//+------------------------------------------------------------------+

#property version   "1.00"

//--- input parameters
input string   TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   datetime xxxxx = StrToTime("21:45");
   Print("error: "+GetLastError());
  }
//+------------------------------------------------------------------+
 
kla-mue: OK, now I know... next time...
  1. 次回は元記事を編集して ください。
  2.    datetime xxxxx = StrToTime("21:45");
       Print("error: "+GetLastError());
    test EURUSD,H1: エラーです。4051
    エラーが発生 しない限り、GetLastError() を呼び出さないようにしましょう。xxxx== 0 ですか?なぜGLEと一緒にプリントしなかったのですか?
  3. おそらく、新しいStringToTimeを 試すべきでしょう。
 
kla-mue:

OK、これでわかったわ...次は...。

私の問題に対する解決策はあるのでしょうか?

それは修正されたかもしれません....https://www. mql5.com/en/forum/149475 でも、とにかくサービスデスクに 報告してください。

 
WHRoeder:
  1. 次回は元記事を編集して ください。
  2. test EURUSD,H1: エラーです。4051
    GetLastError() はエラーが発生 しない限り呼ばないでください。xxxx== 0ですか?なぜGLEと一緒に表示しなかったのですか?
  3. おそらく、新しいStringToTime を試してみるべきです。



2: GLEに質問しない場合、どのようにエラーを見つけるのでしょうか?

このコードは、私のEAがなぜエラーメッセージを出すのかを調べるためのものです。他の目的はない。


3: StringToTimeは同じエラーを引き起こす :(


他の可能性はありますか?

 
kla-mue: 2: エラーかどうかは、GLEに聞かないとわからないのですか?

GLEは、エラーがあるかどうかを教えてはくれません。エラーが発生したときに、そのエラーが何であるかを教えてくれるのです。

GLE は、最後に発生したエラーコードを 返します。そのコードは、どのようなコードと関連付けられていますか?不明です。端末の内部処理に関連したものか、以前に呼び出した関数からの呼び出しかもしれません。

Don't call GetLastError() unless you have an error
OrderSend が負のチケットを返す場合、Time[i] がゼロを返す場合、またはStringToTime がゼロを返す場合などはエラーになります。
 

文字列から時刻への変換

この関数は、時刻または日付を "yyyy.mm.dd [hh:mi]" 形式で含む文字列を datetime 型に変換します。

datetime StringToTime(
string value // date string
);

パラメータ

[yyyy.mm.dd hh:mi " 形式の文字列。

datetime xxxxx = StringToTime(D'21:45');
 
qjol:
D'21:45'

これは文字列ではなく、すでに日付時間 です(コードをコンパイルした日の21時45分。)
ドキュメントを読むStrToTime()

  datetime var1; var1=StrToTime("2003.8.12 17:35"); var1=StrToTime("17:35"); // 現在の日付と与えられた時間を返す var1=StrToTime("2003.8.12"); // 深夜時間 "00:00" と共に日付を返す。
 
ただし、「yyyy.mm.dd hh:mm」形式でないと、エラー4051が発生します。
 

PERFECT !これで、エラーなしで実行できるようになりました =)

それは完全な日付形式である必要があります

TNX a lot!