OOP, mql5의 템플릿 및 매크로, 미묘함 및 사용 기술 - 페이지 23

 
Igor Makanu :

당신이 원하는 것을 할 수 있도록


어제 마법 주문 #defaine abracadabra ##_ 의 도움으로 제안된 옵션에 관심이 있습니다.

상향:

블라디미르 시마코프 좋아, 내가 알아내려고 노력할게

이고르 마카누 :

당신이 원하는 것을 할 수 있도록


어제 마법 주문 #defaine abracadabra ##_ 의 도움으로 제안된 옵션에 관심이 있습니다.

상향:

블라디미르 시마코프 좋아, 내가 알아내려고 노력할게

상향:

만세! 벌었다! (와 함께)


고맙습니다! 모든 것이 계획대로 진행되었습니다!


추신: 이 abracadabra에 매크로 __MQL5__ 및 __MQL4__를 추가하는 방법, 그러나 fast_xxx() 함수가 MQL4 코드에 전혀 나타나지 않도록 - NEVER라는 단어에서

상향:

만세! 벌었다! (와 함께)


고맙습니다! 모든 것이 계획대로 진행되었습니다!


추신: 이 abracadabra에 매크로 __MQL5__ 및 __MQL4__를 추가하는 방법, 그러나 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 :

알겠습니다. 하지만 매크로에서 보고 싶은 것은 아마도 단순한 것입니다(원시적일 것입니다).

상향:

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

bool isMQL5 = mql5;
 
Igor Makanu :

알겠습니다. 하지만 매크로에서 보고 싶은 것은 아마도 단순한 것입니다(원시적일 것입니다).

상향:

신성한 의미는 무엇입니까?

 
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의 크기를 확인하십시오 ;)

추신: if()에서 isMQL5, mql5 를 제공할 수 있으며 const 수정자를 제거할 수 있습니다. 일반적으로 올바른 컴파일러

 

이 코드가 있습니다:

 #import "mydll.dll"
#import

어떤 이유로 mt4는 2개의 EA에서 호출되면 메모리에 dll의 새 복사본을 생성하지 않습니다. dll 자체를 편집하고 싶지 않습니다(100에 적합). mydll.dll 파일을 5번 복사하는 것이 더 쉽습니다.

이렇게 하려면 매크로 설정을 해야 합니다.

 #define dllnum 02

#import "mydll 02 .dll"
#import

하지만 매크로가 없는지 확인하고 싶습니다. dllnum 그러면 "mydll.dll" 과 같을 것입니다.



상향:

그렇게 결정

 #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 :

이 코드가 있습니다:

어떤 이유로 mt4는 2개의 EA에서 호출되면 메모리에 dll의 새 복사본을 생성하지 않습니다. dll 자체를 편집하고 싶지 않습니다(100에 적합). mydll.dll 파일을 5번 복사하는 것이 더 쉽습니다.

이렇게 하려면 매크로 설정을 해야 합니다.

하지만 매크로가 없는지 확인하고 싶습니다. dllnum 그러면 "mydll.dll" 과 같을 것입니다.



상향:

그렇게 결정


UPD2: 결정하지 않았습니다(((

'mydll02.dll' - 전역 범위에서 식은 허용되지 않습니다.

아무 것도 작동하지 않을 것입니다.

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

여기에서 유효한 토큰을 얻지 못했습니다. 일반적으로 µl는 다음을 수행할 수 있어야 합니다.

 #import "jkjfkj" ".dll"

그러나 아아, 그들이 말하는 것처럼 - 당신은 여기에 ++))

 
Vict :

아무 것도 작동하지 않을 것입니다.

여기에 유효한 토큰이 없습니다. 일반적으로 µl는 다음을 수행할 수 있어야 합니다.

그러나 아아, 그들이 말하는 것처럼 - 당신은 여기에 ++))

적어도 매크로 대체를 통해 플러그인을 연결하려고 .... 뭔가 잘못되었습니다.

 #define FNAME <mylib.mqh>

#include FNAME

'#include' - 큰따옴표 또는 꺾쇠 괄호 <가 필요합니다.

'#include' - 전역 범위에서 식은 허용되지 않습니다.


 
Igor Makanu :

나는 단지 이해하지 못했습니다-무엇을 위해 촛불을 태웠습니까? 이것은 아마도 효과가 있을 것입니다:

 #define LIB "kjkjkjk.dll"
#import LIB

일부 구성이 수정될 때 유용할 수 있음을 인정합니다.

추신: 여전히 정말로 원한다면 이름을 시도하거나 name_dll(점 없이)을 지정하십시오. 아마도 이륙할 것입니다.