잘. 내가 처음이야. :)
대부분의 "마법 같은" 장소는 다소 느린 것이 사실입니다. 하지만... mql5 마법사 중 한 명이 나중에 속도를 높일 수 있는 방법을 찾을 수 있을까요?// 속도가 얼마나 느려지는지 직접 확인할 수 있습니다. 테스트는 작업 속도를 측정하는 데만 사용됩니다.
이 코드는 2차원 배열을 사용하는 일반적인 구문에 따라 작동합니다.
void OnStart () { float FA[ 5 ][ 3 ]; long st= GetTickCount (); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i< 5 ;i++) { for ( int j= 0 ;j< 3 ;j++) { FA[i][j] = (i+ 1.5 )*(j+ 1.3 ); } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); st= GetTickCount (); C2DMagicArray MA( 5 , 3 ); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i<MA.SizeL();i++) { for ( long j= 0 ;j<MA.MaxR();j++) { MA[i][j] = (i+ 1.5 )*(j+ 1.3 ); // ^ ^ Как это сделано ??? Можете повторить ? :)) } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); st= GetTickCount (); for ( int t= 0 ;t< 1000000 ;t++) { for ( int i= 0 ;i<MA.SizeL();i++) { for ( long j= 0 ;j<MA.MaxR();j++) { MA.Set(i,j, float ((i+ 1.5 )*(j+ 1.3 ))); } } } Print ( "====" , GetTickCount ()-st, " ms ====" ); for ( int i= 0 ;i<MA.SizeL();i++) { for ( int j= 0 ;j<MA.MaxR();j++) { Print ( MA[i][j] ); // ^ ^ Как это сделано??? :)) Жду Вашу версию ! } } }
아직 코드를 컴파일할 수 없습니다. 포함 프로그램은 나중에... - 그렇지 않으면 그다지 흥미롭지 않을 것입니다. :)
그렇다면 누가 위업을 반복할 수 있습니까?
블라디미르가 우리의 답변을 기다리는 동안 나도 한 가지 위업에 해당하는 질문이 있습니다.)
하나의 ex5에서 32개 및 64개 DLL에서 함수를 가져오려면 어떻게 해야 합니까?
따라서 2개의(32/64) 터미널에 대해 하나의 ex5를 만든다고 가정해 보겠습니다.
- www.mql5.com
다시 예외를 요청합니까?
아니요, 예외를 요청한 적이 없습니다. 그리고 그것은 아마도 그들에 관한 것이 아닙니다. #ifdef 에 더 가깝습니다.
블라디미르가 코드 로 작업의 오버로드를 마무리할 수 있다면 그의 방법이 필요한 DLL o_O를 자동으로 포함하는 데 적합할 수 있기를 바랍니다.
#define 내부의 일종의 #가져오기
잘. 내가 처음이야. :)
그렇다면 누가 위업을 반복할 수 있습니까?
문서에 비슷한 예가 나와 있지만 무언가가 오랜 시간 동안 위업을 반복하지 않습니다.
//--- перебираем строки для сложения for ( int i= 0 ;i<rows;i++) { //--- запишем результаты сложений строк матриц в массив for ( int k= 0 ;k<cols;k++) { arr[k]= this [i][k]+m[i][k]; } //--- поместим массив в строку матрицы res[i]=arr; }
문서에 비슷한 예가 나와 있지만 무언가가 오랜 시간 동안 위업을 반복하지 않습니다.
글쎄,이 유추에 따라 ... 비즈니스 뭔가! ... :-))
그리고 살펴보겠습니다. ;)
하나의 ex5에서 32개 및 64개 DLL에서 함수를 가져오려면 어떻게 해야 합니까?
따라서 2개의(32/64) 터미널에 대해 하나의 ex5를 만든다고 가정해 보겠습니다.
함수의 이름은 다르게 지정됩니다. 그리고 코드에서 터미널의 비트에 따라 조건부 호출을 넣고 다른 기능에 액세스합니다.
터미널이 첫 번째 호출에서 DLL을 로드하는 것 같습니다. 전화 없음 - 다운로드 시도 없음 및 심각한 유산.
아직 다른 방법이 보이지 않습니다. 터미널 비트 수는 TerminalInfoInteger()를 반환합니다.
bool x64 = TerminalInfoInteger (TERMINAL_X64);
이 모든 작업은 MyLib.ex5 라이브러리에서 직접 수행할 수 있습니다.
void MyLibMultibitFunc() // библиотечная универсальная обёртка для DLL-функции { if (x64) { MyDll64Func(); } else { MyDll32Func(); } }
함수의 이름은 다르게 지정됩니다. 그리고 코드에서 터미널의 비트에 따라 조건부 호출을 넣고 다른 기능에 액세스합니다.
터미널이 첫 번째 호출에서 DLL을 로드하는 것 같습니다. 전화 없음 - 다운로드 시도 없음 및 심각한 유산.
아직 다른 방법이 보이지 않습니다. 터미널 비트 수는 TerminalInfoInteger()를 반환합니다.
이 모든 작업은 MyLib.ex5 라이브러리에서 직접 수행할 수 있습니다.
예, 터미널이 첫 번째 호출에서만 dll 함수 개체를 생성한다는 의견도 있습니다.
비트에 관해서는 포럼에서 숫자의 다른 표현에 대한 언급이 있었던 것 같습니다. 변경이 있는 비트 필드가 하나의 결과를 제공하면 32가 될 것이고 다른 하나는 64가 될 것입니다. 경험적으로 결정할 수 있습니다.
함수의 이름은 다르게 지정됩니다. 그리고 코드에서 터미널의 비트에 따라 조건부 호출을 넣고 다른 기능에 액세스합니다.
터미널이 첫 번째 호출에서 DLL을 로드하는 것 같습니다. 전화 없음 - 다운로드 시도 없음 및 심각한 유산.
아니요, 여러분, 당신은 문제를 이해하지 못합니다. TERMINAL_X64 또는 _Is64의 가능성이 알려져 있습니다.
그러나 불행히도 터미널은 다릅니다.
- 차트에 던질 때 사용된 DLL 목록을 확인하고 Dependencies 창 에 가져온 함수 목록을 표시합니다.
비트 수와 일치하지 않는 DLL에서 경고 MQL5\Libraries\somedll64.dll' is not 32-bit version 을 씁니다.
- 그런 다음 OK를 누르고 Expert Advisor가 시작되면 여기에서 매복이 기다립니다.
터미널에서 오류 193을 제공하고 EX5를 언로드합니다.
EX5 로딩 실패
그리고 코드에는 DLL 선언만 있고 이 선언에서 함수를 가져오지 않는다는 점에 주의하고 싶습니다.
#가져오기 "somedll64.dll"
#수입
- www.mql5.com
그래서 1번 문제가 있습니다.
64 응용 프로그램은 user32.dll 등과 같은 32비트 dll에서 기능을 어떻게 가져 옵니까? 아니면 시스템에 해당 이름을 가진 복사본이 있고 OOP 공간이 생성됩니까?
나는 여기에서 다음과 같이 모든 종류의 mql5 "불가능"을 게시하고 분석할 것을 제안합니다. 조건부 컴파일 .
당신은 호기심 많은 사람들을 괴롭히고 독자의 창의력을 자극하기 위해 먼저 기능을 보여줄 수 있습니다( 구현을 공개하지 않고 ).
그러나 궁극적으로 비밀을 밝히고 샘플 구현을 제공하는 것이 필요합니다(필수!).
물론 이러한 "2단계" 형식은 사기로 가득 차 있지만 "바자회에 응답"할 준비가 된 마법사의 정직한 진술에 의존할 것입니다. :)
--
그래서........... 시작!