来了,我先来。:)
虽然最 "神奇 "的地方慢了很多 - 但...也许某个mql5的向导会找到一种方法来加速它?// 你可以自己看看他们有多慢,这个测试专门用来测量他们的速度。
这段代码是按照使用二维数组的通常语法工作的。
void OnStart() { float FA[5][3]; long st=GetTickCount(); for(int t=0;t<1000000;t++) { for(int i=0;i<5;i++) { for(int j=0;j<3;j++) { FA[i][j] = (i+1.5)*(j+1.3); } } } Print("====",GetTickCount()-st," ms ===="); st=GetTickCount(); C2DMagicArray MA(5,3); for(int t=0;t<1000000;t++) { for(int i=0;i<MA.SizeL();i++) { for(long j=0;j<MA.MaxR();j++) { MA[i][j] = (i+1.5)*(j+1.3); // ^ ^ Как это сделано ??? Можете повторить ? :)) } } } Print("====",GetTickCount()-st," ms ===="); st=GetTickCount(); for(int t=0;t<1000000;t++) { for(int i=0;i<MA.SizeL();i++) { for(long j=0;j<MA.MaxR();j++) { MA.Set(i,j,float((i+1.5)*(j+1.3))); } } } Print("====",GetTickCount()-st," ms ===="); for(int i=0;i<MA.SizeL();i++) { for(int j=0;j<MA.MaxR();j++) { Print( MA[i][j] ); // ^ ^ Как это сделано??? :)) Жду Вашу версию! } } }
你还不能编译代码:内联将在以后进行......- 否则,它就不会那么有趣了。:)
那么,谁能重复这一壮举?
当弗拉基米尔在等待我们的答案时,我有一个值得一试的问题;)
我们怎样才能使一个ex5从32和64的DLL中导入函数?
比方说,为两个(32/64)终端制作一个ex5。
- www.mql5.com
来了,我先来。:)
那么,谁能重复这一壮举?
重复你的壮举要花很长时间 :)尽管在文件中也有一个类似的例子。
//--- перебираем строки для сложения for(int i=0;i<rows;i++) { //--- запишем результаты сложений строк матриц в массив for(int k=0;k<cols;k++) { arr[k]=this[i][k]+m[i][k]; } //--- поместим массив в строку матрицы res[i]=arr; }
重复你的壮举要花很长时间 :)尽管在文件中也有一个类似的例子。
所以用这个比喻来做......没什么大不了的!......。:-))
我也会看一看。;)
这些函数有不同的名字。 而在代码中,根据终端的比特率,把条件性的调用,放到不同的函数上。
在我看来,终端在第一次调用时加载DLL。没有电话--没有试图装载,也没有关键的流产。
我没有看到其他的方法。 终端位数是由TerminalInfoInteger()返回的。
bool x64 = TerminalInfoInteger(TERMINAL_X64);
所有这些都可以直接在MyLib.ex5库中完成。
void MyLibMultibitFunc() // библиотечная универсальная обёртка для DLL-функции { if(x64) { MyDll64Func(); } else { MyDll32Func(); } }
这些函数有不同的名字。 而在代码中,根据终端的比特率,把条件性的调用,放到不同的函数上。
在我看来,终端在第一次调用时加载DLL。没有电话--没有试图装载,也没有关键的流产。
我没有看到其他的方法。 终端位数是由TerminalInfoInteger()返回的。
所有这些都可以直接在MyLib.ex5库中完成。
是的,同样的观点,终端只在第一次调用时创建dll-function对象。
关于比特性,似乎有一些人在论坛上提到了数字的不同表示方法,如果变量的比特字段给出了一个结果,但它将是32,如果其他,它将是64。它可以由经验决定。
这些函数有不同的名字。 而在代码中,根据终端的比特率,把条件性的调用,放到不同的函数上。
在我看来,终端在第一次调用时加载DLL。没有电话--没有试图装载和关键的流产。
不,先生们,你们不明白这个问题。 使用TERMINAL_X64或_Is64的可能性是已知的。
但不幸的是,终端的做法却不一样。
- 当你赶到图表时,它会检查所使用的DLLs列表,并在Dependencies窗口显示导入的函数 列表
在那些不符合位数的DLL上,它写了一个警告MQL5\Libraries\somedll64.dll'不是32位版本。
- 但当你按下 "确定 "键,专家顾问就开始了,你就真的有麻烦了。
终端产生错误193并卸载EX5
EX5加载失败
我想提请你注意的是,这段代码只包含DLL声明,没有导入任何函数
#import "somedll64.dll"
##进口
- www.mql5.com
我建议张贴和分析所有种类的mql5 "不可能",比如这个:条件编译 。
为了折磨好奇心强的人,刺激读者自己的创造力,有可能一开始就展示出这种可能性(不透露实施情况)。
但最后,有必要(有义务!)揭示这个秘密并 提供一个实施样本。
当然,这样的 "两阶段 "形式充满了骗局,但我要依靠奇迹创造者的诚实陈述,他们准备 "退缩"。:)
--
So........我们来了!