在MQL5中,总是有漏洞可钻! ;) - 页 5

 
sergeev:

我不这么认为,你不可能通过OBJ_TEXT 推送兆字节的信息。

最接近的候选人是资源

注意:一个点实际上是一个由不同类型的变量组成的结构。它在你关闭/打开终端时被保存,也被保存在一个模板中。

 
DC2008:

注意:一个点实际上是一个由不同类型的变量组成的结构。它在你关闭/打开终端时被保存,也被保存在模板中。

?
 
sergeev:

我一直在问,你找到DLL 32/64的解决方案了吗?

系统里有个什么WOW32reg.exe(\System32\)。 我绕来绕去,它对-h-?没有反应,我无法盲目地注册什么。

谷歌也不说话,我在microsoft.com上找不到任何东西......所以这很不错。

 
sergeev:
?

有什么不清楚的?给我一个具体的任务,但都是迂回的方式......?

 
MetaDriver:

我一直在问,你找到DLL 32/64的解决方案了吗?

系统里有个什么WOW32reg.exe(\System32\)。 我绕来绕去,它对-h-?没有反应,我无法盲目地注册什么。

谷歌也不说话,我在microsoft.com上找不到任何东西......总的来说,它是急性子。

所以,只是一个想法,我自己还没有试过。在检测到终端的比特深度后,使用LoadLibrary动态加载DLL。

 
MetaDriver:

我一直在问,你是否已经找到了DLL 32/64的解决方案?

这里有什么问题呢?

导入 时,你指定两个相同的函数,只是参数不同(int/long)。在程序中,根据32/64位的情况,你调用相应的函数。

 
MetaDriver:

我一直在问,你是否已经找到了DLL 32/64的解决方案?

从Windows的函数中调用函数 的代码(当向它们传递指针时)--得到了。

感谢上下文 :: 一切都解决得很整齐。


尤里奇

在导入时,你指定两个相同的函数,只是参数不同(int/long)。在程序中,根据32/64位的情况,你调用相应的函数。


例如,像这样。

#import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
在你用明确的:: 上下文调用的代码中。

::MemRead(...)


也就是说,我们不对函数名称进行乘法,而是对比特率进行自动检测并调用正确的导入函数。

 
MetaDriver:

我一直在想,你是否已经找到了32/64 DLL的解决方案?

最简单的方法是将同名的x32和x64 DLL放入不同的Windows系统目录--SysWOW64和System32,分别。

但程序间的数据交换 确实是个问题,特别是如果你胡乱处理的话。
因此,可能是推理和微软,当在上个世纪九十年代,从文件,流交换对象 - OLE从它到ActiveX -> COM -> COM + -> .NET,即基于程序间交换的技术已经创建了一个新的编程和代码执行系统。

 
Yurich:

这里有什么问题呢?

在导入时,你指定两个相同的函数,只是参数不同(int/long)。在程序中,你根据32/64的比特大小调用适当的函数。

它根本不想加载32位的,即使我已经不打算调用它(dll),它也不想运行这个程序。

如果"允许使用DLL"没有被选中,[OK]按钮根本不显示,只是被取消。 允许,点击OK - 程序崩溃。 死锁。

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


理想情况下,我希望能够在x64终端中调用dll32,我知道理论上是可行的,但我不知道怎么做

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

它根本不想加载32位的,即使我不打算再调用它(dll),它也不想运行程序。

"Allow dll"未被选中时,[OK]按钮根本不显示,只有取消。 允许,点击OK--程序崩溃。 死锁。


理想情况下,我希望能够在x64终端中调用dll32,我知道理论上是可行的,但我不知道怎么做

我刚刚检查过了。
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
该库没有被加载,但在其函数被调用之前,一切都在工作(TEST输出)。

现在我们调用这种库的功能。
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
原因: