エラー、バグ、質問 - ページ 2574

 
Aleksei Beliakov:
これらの関数の結果をontickで表示すると、時間1970.01.01、価格0になります。
昔はバータイムやプライスタイムだったんですけどね。
だから今はこうなっているんです。

もしかして、パソコンにバグがあるのでは?ビルド1220でこのコードが出てきました。

 Print("iHigh ", iHigh(NULL, PERIOD_W1, 0));
 Print("iTime ", iTime(NULL, PERIOD_W1, 0));

印刷物

2019.09.23 09:41:27.560 00 EURUSD,M5: iTime 2019.09.22 00:00:00
2019.09.23 09:41:27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov:
これらの関数の結果をontickで表示すると、時間1970.01.01、価格0の場合です。
昔はバータイムやプライスタイムだったんですけどね。
だから今はこうなっている。

エラーコードは 何ですか?

テストパラメータは何ですか?

週別、月別のデータは読み込まれていますか?全部で何台あるのですか?

 
Slava:

エラーコードは 何ですか?

テストパラメータは何ですか?

週別、月別のデータはアップロードされていますか?全部で何台あるのですか?

再確認したところ、すべて正常に動作するようになりました。

ストーリーをダウンロードしました。

ありがとうございます。

 
このトピックはすでに提起されていると思いますが、1つのデスクトップに2つの異なるバージョンのMT5を共存させることが可能であるべきです(自動更新とロールバックを無効にする)。せめてベータ版とリリースだけでも。あるいは(仮想化せずに)可能である。
 

メモリの観察。

私のコードでは、CopyRatesが1000回ほど実行されています。

そして、引用符の配列が何らかの形で処理され、その最後に私が呼び出す。

ArrayRemove(ArrayQuotes,0,ArraySize)。

ArrayFree(ArrayQuotes)です。

ArrayResize(ArrayQuotes,0)。

ArrayFree(ArrayQuotes)です。

ZeroMemory(ArrayQuotes)です。

(ただ、実験が違う)

結果 - メモリは幾何級数的に増加し、プロセッサの負荷とともに詰まり、i7プロセッサはすべての論理コアの合計で80%詰まり、メモリはギガ以上になっています。

今のところ、CPUは15%以下、メモリはGiga以下というように、サードパーティーのプログラムでリソースの消費を制限することが出来ています。

質問 - これはバグなのでしょうか、それともプラットフォームの機能なのでしょうか?

削除済み  
ソースのエンコードを厳格に選択することは可能か?文字がasciiだけのときはシングルバイト、それ以外はutf-16というのは知っています。utf-8は可能ですか?
削除済み  

ところで、メタエディタの挙動がおかしいので、修正する必要があります。

fn_call();/////////////////////

スラッシュをダブルクリックすると、前の文字でスラッシュがハイライトされます(そこに数字/文字がない場合)。

なぜ不便なのか?コードに一時的な編集を加え、スペースをこの方法でハイライトし、その後、シングルスラッシュを素早くハイライトして削除する必要があります。

 

まだ、DLLから文字列を渡す際の問題に戻りますが、ポインタとして wchar_t*を使用します。
RenatのDLLで文字列を扱う記事から、mqlのstring 型は外部DLLから文字列wchar_t*へのポインタを取ることが明らかである。
つまり、dllにwchar_t*を送り、mqlでstring &として 受信する。
しかし、C関数

wcscpy_s(wchar_t *dest, rsize_t  dest_size, const wchar_t *src);

が正しく動作しない、すなわち、文字列wchar_t* dest へのポインタを mql で受信するが、失敗して出たり入ったりしている。
端末がクラッシュしてプログラムが終了してしまうことがある。

機能で

wcscpy(wchar_t *dest,  const wchar_t *src);

ターミナルはクラッシュしませんが、文字列も断続的に届きます。
次回のビルドで修正してください。

ZS.wchar_t* ポインタが他のスレッドから渡されることを指定するのを忘れていました。
すなわち、wcscpy_s または wcscpy 関数は別スレッドで呼び出されます。

 
Roman:

まだ、DLLから文字列を渡す問題に戻って、ポインタとして wichar_t*を使用します。
RenatのDLLで文字列を扱う記事から、mqlのstring 型は外部DLLから文字列wichar_t*へのポインタを取ることが明らかである。
つまり、wichar_t* を dll に送り、それを mql で文字列 & として受信する。
しかし、C関数

が正しく動作しない。すなわち、文字列wichar_t* dest へのポインタを mql で受け取るが、失敗して出たり入ったりしている。
端末がクラッシュしてプログラムが終了してしまうことがある。

機能で

ターミナルはクラッシュしませんが、文字列も断続的に届きます。
次回のビルドで修正してください。

ZS.書き忘れましたが、wichar_t* のポインタは別のスレッドから渡されます。
すなわち、wcscpy_s または wcscpy 関数は別スレッドで呼び出されます。

また、文字列dest用のメモリは誰が確保するのでしょうか?
 
Vladimir Simakov:
また、文字列dest用のメモリは誰が確保するのでしょうか?

として、mqlのコード内でメモリが確保されます。

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit(out, 165, 32);

mqlの文字列はDLLではwchar_t*であるため,割り当てられたメモリへの ポインタとして渡されます。

Func("Task", out);