const RESOURCEDATA<uint> Resource("\Terminal\99A739E3DB06068691C851DE1765F329\MQL5\Experts\ZC\Conections\Draft4.ex5::ResoC"); // Ресурс для доступа к данным (только для чтения) из другой программы
CONTAINER<uint> Container4; // Сюда будем получать данные
Resource.Get(Container4.Data); // Считали данные из ресурса.
この変更を行ってもまだ同じエラーが出ます。
ロシア語版のコードベースとは 別に各ファイルをダウンロードしてください。
こんにちは、
ある点で行き詰まっています。私は2つのEAを作成し、1つはデータを保存し、もう1つは読み込みます。リソース・ディスカバリーに問題があります。
このコードはデータを保存し、そこからアクセスして読むことができます:
#include "ResourceData.mqh" // https://www.mql5.com/ja/code/22166
#define PRINT(A) Print(#A + " = " + (string)(A));
struct ExampleStruct
{
string ea_name;
string symbol;
string direction;
string time_for_command;
};
ExampleStruct qexamplestruct[2];
int OnInit(void)
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
// Произвольные данные для примера
string Str[] = {"123", "Hello World!"};
qexamplestruct[0].direction="buy";
qexamplestruct[0].ea_name="TestEAname";
qexamplestruct[0].symbol="EURUSD";
qexamplestruct[0].time_for_command="01.01.2021";
string stringtosend = Serialize(qexamplestruct[0]);
const RESOURCEDATA<uint> Resource("::ResoC"); // Ресурс для обмена данными
CONTAINER<uint> Container; // Создаем контейнер - все будет храниться в массиве простого типа (в примере выбран uint)
Container[0] = Str;
Container[1] = stringtosend;
const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::ResoC";
Print(NameOut); // Вывели полное имя ресурса.
Resource = Container.Data; // Отправили данные на обмен
//---
}
string Serialize(const ExampleStruct &s)
{
return s.ea_name + "\n" + s.symbol + "\n" + s.direction + "\n" + s.time_for_command;
}
ExampleStruct Deserialize(const string &line)
{
string parts[];
StringSplit(line, '\n', parts);
ExampleStruct s;
if(ArraySize(parts) > 0) s.ea_name = parts[0];
if(ArraySize(parts) > 1) s.symbol = parts[1];
if(ArraySize(parts) > 2) s.direction = parts[2];
if(ArraySize(parts) > 3) s.time_for_command = parts[3];
return s;
}
このコードはデータを読み込み、毎回何もないと書き込む:
#include "ResourceData.mqh" // https://www.mql5.com/ja/code/22166
#define PRINT(A) Print(#A + " = " + (string)(A));
int OnInit(void){return(INIT_SUCCEEDED);}
void OnTick()
{
const RESOURCEDATA<uint> Resource("\Terminal\99A739E3DB06068691C851DE1765F329\MQL5\Experts\ZC\Conections\Draft4.ex5::ResoC"); // Ресурс для доступа к данным (только для чтения) из другой программы
CONTAINER<uint> Container4; // Сюда будем получать данные
Resource.Get(Container4.Data); // Считали данные из ресурса.
for (int i = 0; i < Container4.GetAmount(); i++)
Print("i==",i);
string Str4;
Container4[0].Get(Str4); // Получили массив
Print("Test!!!"+Str4);
Print(Str4);
//---
}
しかし、なぜか私が書いたものからは、文字列型の配列も、私が構造体から得た単一の文字列も、何の情報も得られないのです。
しかし、なぜか私が書いたものからは、文字列型の配列も、構造体から取得した単一の文字列も、情報が表示されない。
実行したことはありませんが、この ようなケースだと思われます。
この方法で試してみてください。
走ったことはないが、そうだと 思う。
自分で試してみてください。
こんにちは、書き込みありがとうございます。
以前にもこちらで書かれていたので、さっそく試してみました。ResourceData.mqh "も修正しました。残念ながら解決しませんでした。原因はまだわかっていません。
もう少し進展がありました。
ResourceReadImage(FullNameCorrect,Arr,width,height))を直接使用すると、他のEAで作成されたリソースからデータを受け取ることができます。ライブラリ関数(上に添付したものと同様)を介して同じリソース名にアクセスすると、データは受け付けられません。
何が問題なのかわかりましたら、また報告します。
リソースを作っています:
a - ライブラリを通して
b - 手動で作成(ResourceCreate)
別のEAから同じリソース名でリソースデータにアクセスする:
a - ライブラリを通して
b - 手動(ResourceReadImage)
結果
ライブラリを通して作成されたリソースは、手動でもライブラリを通しても見つかりません。
手動で作成されたリソースは手動で検出され読み込まれますが、ライブラリを通しては検出されません。
ライブラリで作成したリソースが、手動でもライブラリでも見つからない。
手動で作成されたリソースは手動で見つけられ、読み込まれるが、ライブラリ経由では見つからない。
ライブラリ経由では動作する。
なぜあなたの元の例が まだ動作しないのかわかりません。
あなたの元の例が なぜ機能しないのか、私にはまだわからない。
他のすべてが正しく書かれていれば、それは助けになるでしょう。
取引、自動取引システム、取引戦略のテストに関するフォーラム。
ライブラリ: TradeTransactions
アレクサンダー, 2025.09.15 21:09
OnTimerへの各入力にオブジェクトを作成し、それに従って、出力でそれを終了させました。そのため、リソースはマイクロ秒の間生き続け、側にはありませんでした。
静的
なんて当たり前のことなんだろう、2日間も気づかずに見過ごしていた)
ありがとうございます!
すべて完璧に動作しています。ライブラリを使用してアルゴリズム間でカスタム構造を交換できる機能は、私の取引にとって大きな助けとなりました!