讨论 "如何在10分钟内为MQL5编写一个DLL并交换数据"。 - 页 5

 
mql5 писал(а)  :

1)哪个版本的终端是32位或64位?

2) 哪个版本的dll是32或64位?

1)是否有选择?我认为从这里 只能下载X86...

2) dll 32

 

重新安装MT5,结果如下。当启动脚本时, 日志中 出现以下信息 在'MQL5DLLSamples.dll'中无法找到函数 fnCalculateSpeed。

为了以防万一,我附上了Dependency Walker 的库的截图。

 
denkir:

重新安装MT5,结果如下。当启动脚本时, 日志中 出现以下信息 在'MQL5DLLSamples.dll'中无法找到函数fnCalculateSpeed

为了以防万一,我附上了Dependency Walker 的库的截图。

重新安装的终端的构建号 是什么?
 
stringo:
重新安装的终端的构建号 是什么?
显然是旧的,不是最新的240版本。
 
Renat писал(а) :
显然是旧的,显然不是最新的240版本。

是的,绝对不是最后一个...。

升级到240bild后,脚本的第一次运行很正常。我兴奋起来。但随后的运行只导致了崩溃。MT 4正在并行运行。

 

重新启动后,一切似乎都在工作!这就是我们的工作。:-))

注释了函数fnCrashTest(int arr )

感谢所有帮助过的人!

 
一般来说,我没有设法将使用dll的计算速度提高2.5倍以上。这显示了MQL5的高速度,对于大多数交易任务来说,除了需要保护代码和需要进行 "繁重 "计算时,没有必要为dll而烦恼。
 
joo:
一般来说,我没有设法将使用dll的计算速度提高2.5倍以上。这表明了MQL5的高速度。 对于大多数交易任务来说,没有必要为dll而烦恼,除非有必要保护代码和需要进行 "重 "计算。

MQL5的最终寄存器优化还没有启用--执行速度 仍将严重提高。
 

雷纳特,感谢你的文章。我认为许多人将不止一次需要它。我有一个与dll有关的附带问题。(终端249,编辑248)。

例子

我们有一个libra demo.dll,只有一个函数。

_DLLAPI void __stdcall demo(char *stream, char *buf){ buf=stream;}

我们有一个mql脚本demo.mq5。

#property copyright "2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#import "demo.dll"
void demo(string s1, string &s2);
#import

void OnStart(){
   string a="TEST"; string b;
   demo(a,b);
   Print(b);    
}

编译器没有显示任何错误或警告。

在终端运行它,得到如下结果

在可视化调试中检查时,我还发现demo.dll函数本身的第一个字符,不是一个字符串。

问题是

有什么问题呢?如何以人性化的方式将字符串从MQL传给dll?

 
使用wchar_t 而不是 char