错误、漏洞、问题 - 页 1313

 
Konstantin Karpov:
我怎样才能在编译时确定终端是哪种位模式?TERMINAL_X64 标识符不适合,因为它是为函数设计的最有可能的是,有些宏在帮助中没有提到,但它们偶尔会以这样或那样的方式出现 :)
唉,他们没有。有一个变量_IsX64,但它在运行时发挥作用。
 

我怎样才能摆脱使用两个dll,一个用于32位终端,一个用于64位终端?保留两个程序的实例并不符合卡西尔原则...

顺便问一下,谁有经验,如果你在ME x64中编译代码,它将在32位终端上工作而不出错,或者会有一些代码执行的隐藏功能?

 

例如,在32位终端library_x86.dll和64位终端library_x64.dll的库中,有funcTest(...)函数。

如果导入 在整个文件中是可见的,那么写这样一个结构是否正确。

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import  library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import  library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
还是这一招不起作用?
 
Konstantin Karpov:
还是这一招不起作用?

据我所知,没有。你可以导入这两个dlls,并根据终端的比特率调用 其中一个的功能

一般来说,按比特率分成两个版本并不是那么妄想的选择。

 

我采取了一个指标(任何标准集),在专家顾问中调用它。

iCustom (NULL, 0, "Momentum", 0, 1);

在测试器中运行带有可视化的EA后--一切正常,指标被绘制出来。

现在我改变了指标中的一行

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

到这一行。

ExtMomBuffer[i]=100;

而现在,指标根本没有画出任何东西--甚至连垂直刻度 都没有标记。

错误在哪里?MetaTrader 4 build 765。

 
你需要在窗口内有两个不同的值来使刻度出现?EMNIP。不知道这是否可以被认为是一个错误。
 

好吧,让我们称其为非常规行为 :)

非常感谢你,但我还有一个问题。是的,它是这样工作的。

ExtMomBuffer[i]=i%2;

这就是它再次停止工作的原因。

ExtMomBuffer[0]=i%2;

我在MT的旧版本中也能工作,新版本有什么问题?

 

所以在第二个版本中,有一个价值。

事实上,我可能是错的。

 

好吧,你可以这样做,但还是没有用。

ExtMomBuffer[0]=cnt++;

问题的关键是,试图在EA的每一步写到指标的0条--没有任何作用。

 

我想我已经找到了可以挖掘的地方。改变了

ArraySetAsSeries(ExtMomBuffer,false);

到真实,而且有些东西开始显示出来了。我要去买醉了。