새로운 MQL4 구문 - 페이지 5

 
gchrmt4 :
여전히 이해하고 있는지 확실하지 않지만... MQL4 가져오기 를 void*로 선언할 수 있다고 생각하지 않습니다. 가져오기에서 특정 데이터 형식을 사용해야 하며 그런 다음 해당 데이터 형식으로 DLL 가져오기만 사용할 수 있습니다. 데이터 유형이 다른 동일한 DLL 함수를 사용하려는 경우 https://www.mql5.com/en/forum/148934 와 같은 해결 방법이 없는 한 문제가 있습니다.


실제로 해결 방법을 사용하고 있지만 모든 유형을 일반 구조체로 래핑하는 것은 매우 약합니다. 일반 구조를 매개변수로 허용하는 것은 향후 릴리스에서 변경될 수 있습니다. 그러나 배열에서는 작동하지 않습니다.

 
Ovo :


실제로 해결 방법을 사용하고 있지만 모든 유형을 일반 구조체로 래핑하는 것은 매우 약합니다. 일반 구조를 매개변수로 허용하는 것은 향후 릴리스에서 변경될 수 있습니다. 그러나 배열에서는 작동하지 않습니다.

...제가 틀린 것 같습니다. 우리 둘 다 잊고 있는 것은 MQL4에 이제 함수 오버로딩이 있으므로 다음과 같이 할 수 있다는 것입니다.

 #import "AnyDll.dll"
   void Test(TestStruct &[]);
   void Test( int &[]);
#import 
 
gchrmt4 :

...제가 틀린 것 같습니다. 우리 둘 다 잊고 있는 것은 MQL4에 이제 함수 오버로딩이 있으므로 다음과 같이 할 수 있다는 것입니다.


물론, 그것은 내가 처음부터 이야기하는 것입니다 :)

지금까지 내 가져오기 는 다음과 같습니다.

 bool ReadFile( int , MT4Structure&, uint , uint &[], int ); // wrapper for all simple types / structures
bool ReadFile( int , double &[], uint , uint &[], int );
bool ReadFile( int , int &[], uint , uint &[], int );
bool ReadFile( int , uchar &[], uint , uint &[], int );
bool ReadFile( int , MT4Structure&[], uint , uint &[], int ); // this does not work

그리고 이 목록(단일 수입품의 경우)이 1년에 얼마나 긴지 궁금합니다...

 

또한 포함된 파일에 종속된 코드 컴파일에서 작은 불일치를 발견했습니다.

둘 이상의 프로젝트 가 동일한 포함을 공유하고 포함 파일이 수정되면 첫 번째 프로젝트는 이를 감지하고 다시 컴파일하지만 다음 프로젝트는 그렇지 않습니다. 하지만 심각한 문제는 아닙니다(언제든지 모든 ex4를 삭제할 수 있음).

 

빠른 답변이 필요합니다. 오늘 검색도 피곤합니다. 블록 경계에 도달하기 전에 scope2 를 파괴할 수 있습니까? 나는 그렇게 생각하지 않지만 물어보는 것이 좋습니다.

{
   MT4Scope* scope = new MT4Scope( _Symbol , 222 );
   MT4Scope scope2( _Symbol , 223 );
   delete scope; // calls destructor
   // here I want to call scope2 destructor, but I do not know how

   // some additional code
}
 
Ovo: 빠른 답변이 필요합니다. 오늘 검색하기에도 피곤합니다. 블록 경계에 도달하기 전에 scope2 를 파괴할 수 있습니까? 나는 그렇게 생각하지 않지만 물어보는 것이 좋습니다.
아니요.
 
ubzen :
아니요.


고맙습니다.
 

MT4 600+와 MT5에서 "ArrayMaximum"이 다른 이유는 무엇입니까? MT4 구문을 MT5 구문으로 마이그레이션하는 이유는 둘 다에서 작동하는 응용 프로그램을 쉽게 개발할 수 있도록 하기 위해서라고 생각했습니다?!?!


MT4

 int    ArrayMaximum (
   const void &   array[],             // array for search
   int            count= WHOLE_ARRAY ,   // number of checked elements
   int            start= 0                // index to start checking with
   );


MT5

 int    ArrayMaximum (
   const void &   array[],             // array for search
   int            start= 0 ,             // index to start checking with
   int            count= WHOLE_ARRAY      // number of checked elements
   );
 
dlewisfl :

MT4 600+와 MT5에서 "ArrayMaximum"이 다른 이유는 무엇입니까? MT4 구문을 MT5 구문으로 마이그레이션하는 이유는 둘 다에서 작동하는 응용 프로그램을 쉽게 개발할 수 있도록 하기 위해서라고 생각했습니다?!?!

아마도 이전 버전과의 호환성을 유지하기 위해 노력할 것입니다. . .
 
dlewisfl : "ArrayMaximum"이 MT4 600+와 MT5에서 다른 이유는 무엇입니까? MT4 구문을 MT5 구문으로 마이그레이션하는 이유는 둘 다에서 작동하는 응용 프로그램을 쉽게 개발할 수 있도록 하기 위해서라고 생각했습니다?!?!
안좋다. 따라서 직접 만드십시오.
 int iArrayMaximum( const void & array[], int iLimit= WHOLE_ARRAY , int iBeg= 0 ){
   if (iLimit == WHOLE_ARRAY ) iLimit = ArraySize (array);
#ifdef __MQL4__
   return ( ArrayMaximum (array, iLimit - iBeg + 1 , iBeg) );
#else
   return ( ArrayMaximum (array, iBeg, iLimit - iBeg + 1 ) );
#endif
}
문제 해결됨.