오류, 버그, 질문 - 페이지 1017

 
A100 :

요컨대, .mqh에서 함수의 구현을 정의하고 .ex5에서 문제 없이 사용하는 것은 불가능합니다.

:)

할 수 있다. 그러나 다른 .ex5 한 .ex5에서 함수를 호출하는 경우 동일한 이름의 함수가 둘 다에 존재함에도 불구하고 네임스페이스의 정확한 표시에 주의해야 합니다. 즉, 동일한 :: In()은 이론적으로 문제를 해결해야 합니다. 그리고 그가 그것을 해결하지 않으면 이것은 수정해야 할 버그이기 때문에 서비스 데스크에 있습니다.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 

ServiceDesk의 답변에 대해 살펴보겠습니다.

"1.mq5를 컴파일할 때 함수 B() 내부에서 어떤 함수를 호출해야 하는지 명확하지 않습니다.
가져온 A() 또는 내보낸 A() - 왜냐하면 컴파일러는 당신이 같은 기능을 의미한다는 것을 이해하지 못합니다"

형식은 정확하지만 원하는 경우 컴파일 시 모듈 이름을 반복하기 때문에 컴파일러는 이것이 동일한 기능이라고 말할 수 있습니다.

게다가, 먼저 ::를 한 곳에 넣고 컴파일한 다음 삭제하고 다른 곳에 ::를 넣으면 모든 것이 작동하지만 인정해야 합니다. 매우 불편하고 10-15개의 강제 순열 후에 #define으로 전환했습니다.

 
A100 :

ServiceDesk의 답변에 대해 살펴보겠습니다.

"1.mq5를 컴파일할 때 함수 B() 내부에서 어떤 함수를 호출해야 하는지 명확하지 않습니다.

가져온 A() 또는 내보낸 A() - 왜냐하면 컴파일러는 당신이 같은 기능을 의미한다는 것을 이해하지 못합니다"

확실히, 그것이 바로 그것입니다.


그것들은 형식이 옳습니다. 그러나 원한다면 컴파일러는 이것이 동일한 함수라고 말할 수 있습니다(그리고 그래야만 합니다). 다시 말하지만, 모듈 이름은 컴파일 시 사용할 수 있기 때문입니다(#import에 지정됨).

이러한 힌트에 대한 컨텍스트 해석 연산자 "::"가 있지만, 이 경우 모듈(파일) 이름도 일치하므로 적용할 수 없습니다.

조언은 적절합니다. 프로그램의 구조를 변경하는 것입니다.

더욱이, 먼저 ::를 넣고 한 곳에 컴파일한 다음 삭제하고 ::를 다른 곳에 넣으면 모든 것이 작동하지만 인정해야 합니다. 이것은 매우 불편합니다.

그러한 트릭은 피하는 것이 가장 좋습니다. 이것은 불편할 뿐만 아니라 "인종적으로 틀리다", "코셔가 아니다", "못생긴", "콧물"이다. 컴파일러를 속이려는 시도는 계획을 구현하기 위한 다른 옵션이 없는 경우에만 존재할 권리가 있습니다. 이 경우 많이 있습니다.


10-15개의 강제 순열 후에 #define으로 전환했습니다.

최고의 솔루션이 아닙니다. 매개변수화된 정의는 유형 검사가 바람직하지 않거나 "상세한" 텍스트 청크가 매개변수를 대체할 때만 유용합니다. 인라인 함수의 대체물로서, define은 확실히 프로그램의 상태에 좋지 않습니다.

--

귀하의 경우 .ex5 라이브러리 사용을 거부합니다. 그리고 모든 것이 휘파람과 함께 작동합니다. 실제 사용은 구현을 숨길 때만(판매할 때), 다른 경우에는 이점이 보이지 않습니다.

판매를 위해 글을 쓰십니까?

 
MetaDriver :

판매를 위해 글을 쓰십니까?

자신을 위해.

.ex5 없이는 작동하지 않습니다. 나는 또한 F( string& [] )와 같은 함수를 가지고 있는데, 그것들은 어떻게 든 .dll에 맞지 않습니다. :)

어떻게든 구분자를 통해 밀어넣을 수 있지만 아직 시도하지 않았습니다.

 
A100 :
MQL5에는 인라인 함수(형식)가 없고 대신 매개변수 매크로를 사용합니다. 이는 유형 제어가 없기 때문에 일반적으로 완전히 정확하지 않습니다.

그러나 emnip, 컴파일러는 표현식을 최적화하지 않으므로 속도 측면에서 추가 마이너스가 있습니다. 더 나은 확인.

인라인에 대해 말하면 작동합니다. 이 때문에 디버거에는 여전히 문제가 있었습니다.

 
TheXpert :

인라인에 대해 말하면 작동합니다. 이 때문에 디버거에는 여전히 문제가 있었습니다.

이것이 컴파일러 수준에서 작동하는 방식입니다. 그리고 언어 수준에서 싶습니다. 설명할 수 없는 "컴파일러 우회"를 통해 위의 예를 들었습니다. 모든 것이 작동하지만 직접적으로는 추가 제스처가 필요하고 때로는 중요합니다. 하나의 파일에 동일한 기능이 있지만 10개의 본격적인 .mqh가 이미 100개의 더 작은 .mqh로 나뉩니다.

아직 속도를 쫓지 않았습니다. 가장 중요한 것은 편리함과 코드 양이 기하급수적 으로 증가하지 않는다는 것입니다.

MQL5에서 #if #else의 유사체를 사용해야 하는 경우도 있습니다(지금은 비뚤어졌지만 일부 장소에서는 작동함).

 
A100 :

아직 속도를 쫓지 않았습니다. 가장 중요한 것은 편의성과 코드 양이 기하급수적으로 증가하지 않는다는 것입니다.

귀하의 비즈니스. 그러나 제한에 대한 메타 따옴표의 병리학 적 사랑을 감안할 때 그러한 매크로를 사용하면 여전히 몇 개의 갈퀴를 잡을 확률이 0이 아닙니다.
 

A100 :

.ex5 없이는 작동하지 않습니다. 나는 또한 F( string& [] )와 같은 기능을 가지고 있습니다. 그들은 어떻게 든 .dll에 맞지 않습니다. :)

....

하나님.. .. :)

.ex5 라이브러리 대신 DLL 사용을 제안하지 않았습니다. 많은 .mqh와 실행 가능한 .mq5 하나만 있으면 됩니다.

 
MetaDriver :

다대다 .mqh와 하나의 실행 파일 .mq5만 있고 다른 것은 없습니다.

3개의 다른 터미널에서 하나의 코드를 사용하므로 적어도 하나 이상의 .ex5(모두에게 공통)가 있어야 합니다. 그렇다면 위에서 설명한 문제로 돌아갑니다. 모듈은 2개뿐이지만 정상적으로 컴파일되지 않습니다.
 
ChartGetInteger ( chart_ID, CHART_BRING_TO_TOP , 0 , true )
ChartGetInteger ( chart_ID, CHART_BRING_TO_TOP , true )
비 거래 시간에는 열지 않습니다. 그리고 비 거래 시간에 차트를 다른 차트 위에 놓는 것을 막는 것은 무엇입니까?