mql5 : 간단히. x86(32비트) 프로세스용 시스템 라이브러리 함수에는 x64로 전달되고 실행되고 x86으로 다시 반환되는 특수 래퍼가 있습니다.
64비트 Windows에는 SysWOW64 폴더가 있습니다. 이 폴더는 64비트 OS에서 실행되는 32비트 응용 프로그램을 위한 것이며 System32 폴더는 일반적인 64비트 라이브러리와 드라이버를 저장합니다. 프로그램이 32비트로 실행되면 System32 폴더에 대한 호출이 SysWOW64로 리디렉션됩니다.
짧게는 아니더라도 MT5에서는 32/64비트 문제가 심각해졌습니다.
이 문제 는 매우 중요 하며 해결해야 할 때입니다.
또는 터미널 자체가 둘 중 하나를 얻을 위치를 이해할 수 있도록 라이브러리64 폴더를 추가하십시오. 또는 Windows 폴더 System32 / SysWow64 에 DLL을 분산시키는 방법을 제공하십시오. 또는 #ifdef 를 제공하십시오
N차원(이중) 배열의 두 번째 버전입니다. 배열 구조는 다른 (int) 배열에 의해 생성자에서도 설정됩니다.
이 옵션은 이전 옵션보다 약간 빠릅니다. 그리고 이 변형에서는 하위 배열로 작업을 만드는 것이 더 쉽습니다.
유리, 당신은 멋지다. 나는 며칠 동안 포럼에서 약간 산만 해져서 이미 몇 가지 옵션을 알아 냈습니다.
텍사스 첫 인상에서 - 첫 번째 옵션은 인덱스 수가 적은 잘못된 호출의 경우 결함으로 가득 차 있습니다. 예를 들어 double x=A[i][j][k]; 4차원 배열 에 대한 "3차원 호출"은 아무 일도 없었던 것처럼 두 배를 반환하지만 동시에 사용자가 꿈꾸던 배열의 위치에서 반환됩니다. 또한 이러한 오류를 추적하고 처리하는 방법이 명확하지 않습니다. 그러나 첫 번째 구현의 확실한 이점은 메모리 절약입니다. 두 번째 옵션은 훨씬 더 낭비입니다. 그러나 올바르게 지적했듯이 그 안에 있는 하위 배열에 접근하려고 할 수 있으며 그 과정에서 발생하는 모든 어려움은 완전히 극복할 수 있습니다.
다른 것을 생각해야 합니다. 아이디어가 있지만 오늘 거기에 도착하면 오늘 밤 늦게까지 여가 시간을 얻지 못할 것입니다. 그러나 우리는 주제를 마치겠습니다. 약속합니다. :)
--
주요 아이디어: "왼쪽 인덱스 컨트롤러"와 같은 다른 클래스를 사용하고 메인 클래스로 맨 오른쪽 인덱스를 처리해야 합니다(작동하는 경우 작동하지 않는 경우 오른쪽 인덱스에 대한 다른 클래스). 이 경우 기본 이중 배열(1차원 및 고유)을 기본 CNArray 클래스의 구성원으로 만들어야 합니다. 이 같은.
텍사스 첫 인상에서 - 첫 번째 옵션은 인덱스 수가 적은 잘못된 호출의 경우 결함으로 가득 차 있습니다. 예를 들어 더블 x=A[i][j][k]; 4차원 배열에 대한 "3차원 호출"은 아무 일도 없었던 것처럼 두 배를 반환하지만 동시에 사용자가 꿈꾸던 배열의 위치에서 반환됩니다. 또한 이러한 오류를 추적하고 처리하는 방법이 명확하지 않습니다.
Yurich의 첫 번째 방법을 비틀면 다음과 같이 배열의 순위를 제어할 수 있는 것 같습니다.
class DinArr_Double{
doublevalue [];
int size[];
int index;
int ivalue;
int range;
bool checkerror;
public :
DinArr_Double( constint &n[]);
~DinArr_Double() { ArrayFree( value ); ArrayFree(size);}
doubleoperator []( long x_);
DinArr_Double* operator []( int x_);
voidoperator = ( double d) { value [ivalue]=d; index= 0 ; ivalue= 0 ;}
};
//+------------------------------------------------------------------+
DinArr_Double::DinArr_Double( constint &n[]){
int m= 1 , k=ArraySize(n);
range = ArraySize(n);
ArrayResize(size,k);
size[k- 1 ]= 1 ;
for ( int i=k- 2 ; i>= 0 ; i--) size[i]=n[i+ 1 ]*size[i+ 1 ];
for ( int i= 0 ; i<k; i++) m*=n[i];
ArrayResize( value ,m);
index= 0 ;
ivalue= 0 ;
checkerror = false ;
}
//+------------------------------------------------------------------+double DinArr_Double:: operator []( long x_){
index= 0 ;
int i=ivalue;
ivalue= 0 ;
return ( value [i+( int )x_]);
}
//+------------------------------------------------------------------+
DinArr_Double* DinArr_Double:: operator []( int x_){
ivalue+=x_*size[index++];
if (index!=range)checkerror = true ; else checkerror = false ;
return (GetPointer( this ));
}
//+------------------------------------------------------------------+void OnStart(){
int n[]={ 2 , 3 , 4 , 2 }; //описание 4-х мерного массиваint a1=n[ 0 ], a2=n[ 1 ], a3=n[ 2 ], a4=n[ 3 ];
DinArr_Double d2(n);
//запись в массивint c= 0 ;
for ( int i= 0 ; i<a1; i++)
for ( int j= 0 ; j<a2; j++)
for ( int x= 0 ; x<a3; x++)
for ( int y= 0 ; y<a4; y++)
d2[i][j][x][y]=( double )c++;
//чтение из массиваstring s= "" ;
for ( int i= 0 ; i<a1; i++)
for ( int j= 0 ; j<a2; j++)
for ( int x= 0 ; x<a3; x++)
for ( long y= 0 ; y<a4; y++)
s+=( string )d2[i][j][x][y]+ " " ;
Print(s);
}
//+------------------------------------------------------------------+
간단히.
x86(32비트) 프로세스용 시스템 라이브러리 함수에는 x64로 전달되고 실행되고 x86으로 다시 반환되는 특수 래퍼가 있습니다.
짧게는 아니더라도 MT5에서는 32/64비트 문제가 심각해졌습니다.
이 문제 는 매우 중요 하며 해결해야 할 때입니다.
또는 터미널 자체가 둘 중 하나를 얻을 위치를 이해할 수 있도록 라이브러리64 폴더를 추가하십시오.
또는 Windows 폴더 System32 / SysWow64 에 DLL을 분산시키는 방법을 제공하십시오.
또는 #ifdef 를 제공하십시오
https://www.mql5.com/ru/forum/6729#comment_199764
추신.
SD #381730 의 애플리케이션
임의 차원의 배열(확정성을 위해 ^16으로 제한).
차원은 일반 배열과 마찬가지로 생성 시 매개변수 수로 설정됩니다.
XXArray xx2(5,7), xx5(12,12,16,16,8);
인덱서는 모든 차원에서 작동해야 합니다( A[i][j][k][n][m]....).
글쎄, 커뮤니티가 조용하기 때문에 나는 계속할 것입니다 ...
N차원(이중) 배열 클래스의 스케치 및 이를 검증하기 위한 테스트.
차원은 생성자의 (int) 배열로 설명됩니다.
N차원(이중) 배열의 두 번째 버전입니다. 배열 구조는 다른 (int) 배열에 의해 생성자에서도 설정됩니다.
이 옵션은 이전 옵션보다 약간 빠릅니다. 그리고 이 변형에서는 하위 배열로 작업을 만드는 것이 더 쉽습니다.
N차원(이중) 배열의 두 번째 버전입니다. 배열 구조는 다른 (int) 배열에 의해 생성자에서도 설정됩니다.
이 옵션은 이전 옵션보다 약간 빠릅니다. 그리고 이 변형에서는 하위 배열로 작업을 만드는 것이 더 쉽습니다.
유리, 당신은 멋지다. 나는 며칠 동안 포럼에서 약간 산만 해져서 이미 몇 가지 옵션을 알아 냈습니다.
텍사스 첫 인상에서 - 첫 번째 옵션은 인덱스 수가 적은 잘못된 호출의 경우 결함으로 가득 차 있습니다. 예를 들어 double x=A[i][j][k]; 4차원 배열 에 대한 "3차원 호출"은 아무 일도 없었던 것처럼 두 배를 반환하지만 동시에 사용자가 꿈꾸던 배열의 위치에서 반환됩니다. 또한 이러한 오류를 추적하고 처리하는 방법이 명확하지 않습니다. 그러나 첫 번째 구현의 확실한 이점은 메모리 절약입니다. 두 번째 옵션은 훨씬 더 낭비입니다. 그러나 올바르게 지적했듯이 그 안에 있는 하위 배열에 접근하려고 할 수 있으며 그 과정에서 발생하는 모든 어려움은 완전히 극복할 수 있습니다.
다른 것을 생각해야 합니다. 아이디어가 있지만 오늘 거기에 도착하면 오늘 밤 늦게까지 여가 시간을 얻지 못할 것입니다. 그러나 우리는 주제를 마치겠습니다. 약속합니다. :)
--
주요 아이디어: "왼쪽 인덱스 컨트롤러"와 같은 다른 클래스를 사용하고 메인 클래스로 맨 오른쪽 인덱스를 처리해야 합니다(작동하는 경우 작동하지 않는 경우 오른쪽 인덱스에 대한 다른 클래스). 이 경우 기본 이중 배열(1차원 및 고유)을 기본 CNArray 클래스의 구성원으로 만들어야 합니다. 이 같은.
텍사스 첫 인상에서 - 첫 번째 옵션은 인덱스 수가 적은 잘못된 호출의 경우 결함으로 가득 차 있습니다. 예를 들어 더블 x=A[i][j][k]; 4차원 배열에 대한 "3차원 호출"은 아무 일도 없었던 것처럼 두 배를 반환하지만 동시에 사용자가 꿈꾸던 배열의 위치에서 반환됩니다. 또한 이러한 오류를 추적하고 처리하는 방법이 명확하지 않습니다.
Yurich의 첫 번째 방법을 비틀면 다음과 같이 배열의 순위를 제어할 수 있는 것 같습니다.
일:
- EA에서 표시기로 숫자 배열을 전송합니다.
정황.
데이터 전송에 사용하지 마십시오
- 차트 이벤트,
- 파일,
- 전역 변수 (파일임),
- DLL
일:
- EA에서 표시기로 숫자 배열을 전송합니다.
정황.
- 데이터 전송을 위해 차트 이벤트, 파일, dll을 사용하지 마십시오.
그런 다음 명명된 파이프가 있습니다.
일:
- EA에서 표시기로 숫자 배열을 전송합니다.
정황.
데이터 전송에 사용하지 마십시오
- 차트 이벤트,
- 파일,
- 전역 변수 (파일임),
- DLL
글쎄, 악용을 위해 누군가를 돌리지 마십시오 :)
그런 다음 하위 차트와 ChartSetString() 및 ChartGetString() 함수를 사용하는 다른 옵션을 제공합니다.