mql5中的OOP、模板和宏,细微之处和用途 - 页 23

 
Igor Makanu:

所以我可以做我想做的事。


对昨天使用魔咒建议的选项感兴趣 #defaine abracadabra#_

UPD。

弗拉基米尔-西马科夫 好的,我试着去弄清楚

伊戈尔-马卡努

那就按我说的做吧


对昨天使用魔咒建议的变化感兴趣 #defaine abracadabra##_

UPD。

弗拉基米尔-西马科夫 好的,我将试着把它弄清楚

UPD。

欢呼吧!它成功了!(С)


谢谢你!它如愿以偿地起飞了。


PZY: 我如何将__MQL5__和__MQL4__宏添加到这个天罡地煞中,但fast_xxx()函数根本就不会出现在MQL4代码中--从字面上看,NEVER

UPD。

欢呼吧!它成功了!(С)


谢谢!它按计划起飞了。


PZY: 我如何将__MQL5__和__MQL4__宏添加到这个abracadabra中,但fast_xxx()函数根本不会出现在MQL4代码中--从字面上看,NEVER

#ifdef __MQL5__
   #ifdef  USE_FAST
      #define  CONNECT fast_connect
   #else
      #define  CONNECT connect
   #endif
#else
   #define  CONNECT connect
#endif
 

我怎么知道哪个终端(MT4/MT5)在执行代码?

一个真/假变量就够了

 
Igor Makanu:

我怎么知道哪个终端(MT4/MT5)在执行代码?

一个真/假变量就够了

bool is_mt5=(TerminalInfoString(TERMINAL_NAME)=="MetaTrader 5");
 
Artyom Trishkin:

好的,但我想在宏中寻找,它很可能是一些简单的东西。

UPD。

#ifdef __MQL5__
  #define  mql5 true
#else
  #define  mql5 false 
#endif

bool isMQL5 = mql5;
 
Igor Makanu:

好的,但我想在宏中寻找,它很可能是一些简单的东西。

UPD。

神圣的含义是什么?

 
Artyom Trishkin:

什么是神圣的意义?

检查编译器,如果它是 "正确的编译器",它应该在编译阶段扔掉一切不必要的东西。

#ifdef __MQL5__
  #define  mql5 true
#else
  #define  mql5 false 
#endif

const bool isMQL5 = mql5;

const string txt_1000symbols = "Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания"
                               "автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные"
                               "экспертные системы, предназначенные для работы в режиме реального времени, но и создавать собственные графические инструменты, помогающие принимать торговые решения."
                               "MQL5 основан на концепции широко распространенного языка программирования С++, по сравнению с MQL4 в нем добавлены перечисления, структуры, классы и обработка событий."
                               " Благодаря расширению числа встроенных основных типов, взаимодействие исполняемых программ на MQL5 с другими приложениями "
                               "посредством dll максимально облегчено. Синтаксис языка MQL5 подобен синтаксису С++, и это позволяет легко переносить на него программы из современных языков "
                               "программирования. Для целей изучения языка все темы сгруппированы по следующим разделам.\n";
//+------------------------------------------------------------------+
void OnStart()
  {
   if(isMQL5) Print(txt_1000symbols);
   Print("end");
  }
//+------------------------------------------------------------------+

编译它并注意.ex5的大小;)

SZY: 在if()中你可以把isMQL5,mql5,你可以删除const修饰符--一般来说,这是一个正确的编译器

 

有这样一个代码。

#import "mydll.dll"
#import

如果你从2个EA调用,mt4不会在内存中创建新的dll副本,我不想编辑dll本身(它是100%满意),复制mydll.dll文件5次更容易。

我需要用宏来获得以下内容

#define  dllnum 02

#import "mydll02.dll"
#import

但我想检查一下,如果没有宏,dllnum,那么它将是 "mydll.dll"



UPD。

这个问题解决了

#define  dllnum 2

#define  DEF_QUOTES(arg) #arg

#ifdef  dllnum
   #define  DEF_DLL_NAME(a,b) DEF_QUOTES(a##0##b.dll)
#else
   #define  DEF_DLL_NAME(a,b) DEF_QUOTES(a.dll)
#endif 

   
string s =  DEF_DLL_NAME(mydll,dllnum);


UPD2:没有解决(()。

'mydll02.dll' - 在全局范围内不允许使用表达式

 
Igor Makanu:

有这样一个代码。

如果你从2个EA调用,mt4不会在内存中创建新的dll副本,我不想编辑dll本身(它是100%满意),复制mydll.dll文件5次更容易。

我需要用宏来获得以下内容

但我想检查一下,如果没有宏,dllnum,那么它将是 "mydll.dll"



UPD。

这个问题解决了


UPD2:没有解决(()。

'mydll02.dll' - 在全局范围内不允许使用表达式

我想,这是不可能的。

DEF_QUOTES(a##0##b.dll)

它在这里没有得到一个有效的令牌。一般来说,MCL应该能够

#import "jkjfkj"".dll"

但可惜的是,正如他们所说--你不在这里,没有C++))。

 
Vict:

我想,这是不可能的。

它在这里没有得到一个有效的令牌。实际上,MCL应该能够

但可惜的是,正如他们所说--这不是C++))。

毫米嗯

至少我试着把tokens....,它又出错了。

#define  FNAME <mylib.mqh>

#include  FNAME

'#include' - 需要双引号或角括号<

'#include' - 在全局范围内不允许使用表达式


 
Igor Makanu:

只是不明白--蜡烛是为了什么而燃烧?这就是它的工作方式,我想。

#define  LIB "kjkjkjk.dll"
#import  LIB

我承认,当有一些配置被纠正的时候,它可能是有用的。

PS:如果你还是很想,试试name_dll(不带点),也许它能起飞。
原因: