const RESOURCEDATA<uint> Resource("\Terminal\99A739E3DB06068691C851DE1765F329\MQL5\Experts\ZC\Conections\Draft4.ex5::ResoC"); // Ресурс для доступа к данным (только для чтения) из другой программы
CONTAINER<uint> Container4; // Сюда будем получать данные
Resource.Get(Container4.Data); // Считали данные из ресурса.
即使我做了这样的改动,还是会出现同样的错误,抱歉。
从俄语版本的代码库中 单独下载每个文件。
您好、
请帮帮我,我在一个问题上卡住了。我做了两个 EA,一个保存数据,另一个读取数据。我在资源发现方面遇到了问题。
这个代码保存数据,我可以从中访问并读取数据:
#include "ResourceData.mqh" // https://www.mql5.com/zh/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/zh/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 的每个输入上创建了一个对象,并相应地在输出上杀死了它。这就是为什么资源只存在几微秒而不在边上的原因。
静态
多么明显的一点,我看了两天都没注意到)。
非常感谢!
一切都运行得很完美,使用你的库在算法之间交换自定义结构的能力对我的交易帮助很大,向你致敬!