// Пример хранения/обмена данными через Ресурсы внутри Терминала#include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ru/code/22166voidOnStart()
{
const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект классаint ArrayINT[] = {1, 2, 3};
int Num = 5;
ResourceINT = ArrayINT; // Ресурс хранит массив.
ResourceINT += Num; // Добавили в ресурс еще значение.
ResourceINT += ArrayINT; // Добавили массив.int ArrayINT2[];
ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.ArrayPrint(ArrayINT2); // Вывели: 1 2 3 5 1 2 3
ResourceINT.Free(); // Удалили данные из ресурсаPrint(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет:0const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект классаMqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick))
for (int i = 0; i < 3; i++)
ResourceTicks += Tick; // Добавили в ресурс тикиMqlTick Ticks[];
ResourceTicks.Get(Ticks); // Считали данные из ресурса.ArrayPrint(Ticks); // Вывели.// Это полное имя ресурса для обращения из другой программыconststring NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";
Print(NameOut); // Вывели полное имя ресурса.const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа данным (read-only) из другой программы.MqlTick TicksOut[];
Resource.Get(TicksOut); // Считали данные из ресурса.ArrayPrint(TicksOut); // Вывели.
Resource.Free(); // 読み取り専用。Print(_LastError); // ERR_INVALID_PARAMETER - この値を返します。
}
すごい!ライブラリーを書かなくても、インポートした関数の 名前を変えるだけで問題は解決しそうだ・・・。今日はもう遅いけど、明日試してみよう。
そうだね。早すぎた。double以外の配列のGetValueは、私が望むものとは全く違うものを返してしまう...。悲しいかな、MSVCなしではやっていけないんだ・・・。えー、チェッカーを手にするのは久しぶりなんだけど・・・。
マスターズ
なぜMQLにポインタが必要なのか理解できない。ポインターを使いたいなら、C++でやればいい。
別のデータ型へのポインタや別の型の配列を渡すことに問題はない!例えば、整数の配列へのポインターを渡すには、次のように宣言します: void setvar(int& var[]);(他の型の場合は何を変更する必要があると思いますか?)
例えば、空のmql関数は空のdll関数よりも高速に動作するが、少なくともs[i]のように配列から選択する操作を追加すれば、c++の勝ちとなる。
最大のパフォーマンス・リークは、グローバル変数を 扱うときだ!DLLを作成し、そこにグローバル変数を格納する方がはるかに簡単です。1つのメタトレーダー内のすべてのExpert Advisorとインジケーターのコピーに対して、1つのdllのコピーがリンクされ、そのすべてのグローバル変数がメタトレーダーのすべてのウィンドウに対してグローバルになります(この真理により、1つのウィンドウの個人データはクラスのインスタンスか、ウィンドウ識別子でアクセスできる配列に保存されます)。
double型だけでなくstruct型の要素を持つ配列を交換できるようにするには、このコードをどのように修正すればよいでしょうか?
このコードはどのように変更すればよいでしょうか?
Библиотеки:TradeTransactions
fxsaber, 2018.09.20 16:23
助けてくれてありがとう。
- このコードが理解できません。構造体はどこにあるのでしょうか?
- MQL4のソリューションが必要です。