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

 
Vict :

이것은 아마도 효과가 있을 것입니다:

그렇게 작동하지 않습니다

#import에 파일 이름이 필요합니다.

빅트 :

나는 단지 이해하지 못했습니다-무엇을 위해 촛불을 태웠습니까?

dll에서 연결 관리자를 만들고 싶지 않지만 MT4에서는 어떤 이유로 2개의 EA에서 dll을 2번 호출하면 dll의 새 복사본이 메모리에 생성되지 않습니다(정적 개체가 dll, .Net을 통한 래퍼 - 하나의 dll을 실행하면 충돌하고 2개의 다른 파일은 문제 없음),

그래서 빨리 하고 싶었습니다. mylib.dll 파일을 mylib02.dll에 복사하면 모든 것이 문제 없이 작동합니다. 하지만 매크로 대체를 전역적으로 선언하고 싶습니다.

 
Igor Makanu :
그렇게 작동하지 않습니다

이것은 버그/간과처럼 보입니다. 이전 포스트의 PS에 주목

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

 
Vict :

이것은 버그/간과처럼 보입니다. 이전 포스트의 PS에 주목

MT4에서는 그렇지 않습니다.

MT4 dll 자체는 런타임에만 볼 수 있지만 내가 논의하는 것은 컴파일러 자체에서 놓치지 않습니다. 이것이 컴파일러가 건너 뛰는 방법입니다

 #import "mylib.dll"
#import
 #import "mylib"
#import

그리고 다음과 같이 작성한다면:

 #import 
"mylib.dll"    //'mylib.dll' - expressions are not allowed on a global scope
#import

저것들. 고정 구문 지시문 #import + 따옴표로 묶인 일부 문자열 - 모두 한 줄에 있습니다.

하지만 fig는 알고 있습니다 - 매크로 대체를 통해 #import "mylib.dll"을 내 자신의 조합으로 대체할 수 없는 이유

빅트 :

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

조건부 컴파일로 포함을 수집할 수 없는 이유를 이해하지 못합니까? - 모든 것이 매우 원시적입니다. 어떻게든 MQL에서 작동합니다.
 
Igor Makanu :

MT4에서는 그렇지 않습니다.

MT4 dll 자체는 런타임에만 볼 수 있지만 내가 논의하는 것은 컴파일러 자체에서 놓치지 않습니다. 이것이 컴파일러가 건너 뛰는 방법입니다

그리고 다음과 같이 작성한다면:

저것들. 고정 구문 지시문 #import + 따옴표로 묶인 일부 문자열 - 모두 한 줄에 있습니다.

하지만 FIG는 알고 있습니다. 매크로 대체를 통해 #import "mylib.dll"을 내 자신의 조합으로 대체할 수 없는 이유

조건부 컴파일로 포함을 수집할 수 없는 이유를 이해하지 못합니까? - 모든 것이 매우 원시적입니다. 어떻게든 MQL에서 작동합니다.

왜 당신에게 효과가 없는지 모르겠어, 모든 것이 나를 위해 작동합니다

 #define DD "jkjk.dll"
#import DD
void fn();
#import
이제 다른 Expert Advisors("lib_1.dll", "lib_2.dll")에서 다른 DD를 쉽게 설정할 수 있습니다.
 
Vict :

왜 당신에게 효과가 없는지 모르겠어, 모든 것이 나를 위해 작동합니다

이제 다른 Expert Advisors("lib_1.dll", "lib_2.dll")에서 다른 DD를 쉽게 설정할 수 있습니다.

죄송합니다. 잊어버렸습니다. 소스가 µl 단위로 속어 전처리기를 통과합니다. 예, 작동하지 않습니다.

 
Vict :

죄송합니다. 잊어버렸습니다. 소스가 µl 단위로 속어 전처리기를 통과합니다. 예, 작동하지 않습니다.

일반적으로 무차별 대입은 MQL을 사용하므로 의도한 대로 작동합니다.

 #ifdef USE_DLL_NUMBER
   #ifdef USE_DLL_NUMBER02 
       #import "mylib2.dll"
   #endif 
#else 
#import "mylib.dll"    
#endif

기본 코드에서 2개의 매크로 대체를 선언합니다.

 #define USE_DLL_NUMBER

#define USE_DLL_NUMBER02 

... 매크로 USE_DLL_NUMBER02로 줄 입니다. 일반적으로 이미 저에게 맞는 것과 비슷합니다. USE_DLL_NUMBER03, USE_DLL_NUMBER04를 쓸 수 있기를 원합니다.

 
Igor Makanu :

... 매크로 USE_DLL_NUMBER02로 줄 입니다. 일반적으로 이미 저에게 맞는 것과 비슷합니다. USE_DLL_NUMBER03, USE_DLL_NUMBER04를 쓸 수 있기를 원합니다.

일반적으로 무차별 대입의 도움으로이 문제를 해결하는 것으로 나타났습니다.

 #ifdef USE_DLL_NUMBER01 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER02  
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER03 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER04 
#define USE_DLL_NUMBER 
#endif
#ifdef USE_DLL_NUMBER05 
#define USE_DLL_NUMBER 
#endif
 

값으로 작동하는 mql4에서 #if 매크로가 구현되지 않은 이유는 유형의 선택적 개체를 생성하는 것이 가능합니다.

 #define Znah 0
#define PrmI int     Peremen= 6 ;
#define PrmD double Peremen= 3.345 ;

#if Znah //если больше 0 то появится переменная int Peremen
   PrmI
#else
   PrmD //иначе появится переменная double Peremen
#endif
결과적으로 전체 후속 프로그램을 원하는 유형으로 편집할 수 있습니다.
 
이 표현식이 false를 반환하는 것을 본 적이 없습니다.
 ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

따라서 거래 내역을 기반으로 주문 실행 시간에 대한 통계를 유지하기가 어렵습니다.

시장 주문의 경우 여전히 ORDER_TIME_SETUP_MSC 값과 일치하는 것이 가능하다면 보류 중인 것은 의미가 없습니다.

 
바나나일 가능성이 큽니다. const 수정자는 객체가 수정되지 않는다는 것을 보장하지 않습니다.
 struct A
{
   int i;

   void f( const A &Value )  
  {
     Print (Value.i); // 0
    
     this .i = Value.i + 1 ;
    
     Print (Value.i); // 1
  }
};

void OnStart ()
{
  A a;
  
  a.f(a);
}


아마도 그러한 상황에서 일부 컴파일러는 경고를 발행합니다.