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

 
Aleksei Beliakov :
이 함수의 결과를 온틱으로 출력하면 1970.01.01 가격이 0입니다.
그것은 바 시간이나 가격이었습니다.
지금 이렇단 말이에요

아마도 컴퓨터에 바퀴벌레가 있습니까? 빌드 1220에 이 코드가 있습니다.

 Print (" iHigh ", iHigh ( NULL , PERIOD_W1 , 0 ));
 Print (" iTime ", iTime ( NULL , PERIOD_W1 , 0 ));

출력하다

 2019.09 . 23 09 : 41 : 27.560 00 EURUSD,M5: iTime 2019.09 . 22 00 : 00 : 00
2019.09 . 23 09 : 41 : 27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov :
이 함수의 결과를 온틱으로 출력하면 1970.01.01 가격이 0입니다.
그것은 바 시간 또는 가격이었습니다.
지금 이렇단 말이에요

오류 코드는 무엇입니까?

테스트 매개변수는 무엇입니까?

주간 및 월간 데이터를 업로드했습니까? 그 중 몇 개가 있습니까?

 
Slava :

오류 코드는 무엇입니까?

테스트 매개변수는 무엇입니까?

주간 및 월간 데이터를 업로드했습니까? 그 중 몇 개가 있습니까?

나는 확인했고 이제 모든 것이 작동합니다.

이야기를 올렸습니다.

고맙습니다.

 
확실히 이 주제는 이미 제기되었습니다. 동일한 데스크탑에 두 개의 다른 버전의 MT5가 공존할 수 있도록 해야 합니다(자동 업데이트 비활성화 및 롤백 기능 비활성화). 또는 최소한 베타 및 릴리스. 또는 가능합니까(가상화 없이).
 

메모리 모니터링.

내 코드에서 CopyRates는 약 천 번 실행됩니다.

그런 다음 따옴표 배열이 어떻게 든 처리되고 그 끝에서 다음을 호출합니다.

ArrayRemove (ArrayQuotes,0,ArraySize);

ArrayFree(ArrayQuotes);

ArrayResize(ArrayQuotes,0);

ArrayFree(ArrayQuotes);

ZeroMemory(따옴표 배열);

(다르게 실험했을 뿐)

결과 - 메모리는 여전히 기하학적으로 증가하고 막히며 프로세서에 대한 부하 - i7의 프로세서는 모든 논리 코어에 대해 집계에서 80% 막히고 메모리는 기가바이트 이상입니다.

지금까지 타사 프로그램의 도움으로 리소스 소비를 제한할 수 있었습니다. 프로세서는 15% 이하이고 메모리는 1기가바이트 이하입니다.

질문 - 이것은 버그입니까 아니면 플랫폼의 기능입니까?

 
소스 코드를 하드 코딩할 수 있습니까? 문자가 ASCII 만 있으면 1 바이트이고 그렇지 않으면 utf-16이라는 것을 알고 있습니다. utf-8이 가능한가요?
 

그건 그렇고, 메타에디터의 이상한 행동은 수정되어야 합니다:

fn_call(); /////////////////////

슬래시를 더블 클릭하면 이전 문자와 함께 슬래시가 선택됩니다(숫자/문자가 없는 경우).

왜 불편한가요? 우리는 코드를 임시로 편집하고 이런 식으로 장소를 할당했습니다. 그런 다음 일부 슬래시를 빠르게 선택하고 제거해야 합니다.

 

그럼에도 불구하고 dll, wchar_t *에서 문자열을 포인터로 전달하는 문제로 돌아가겠습니다.
dll의 문자열 작업에 대한 Renat 의 기사 에서 mql의 문자열 유형이 외부 dll에서 wchar_t * 문자열에 대한 포인터를 수신한다는 것이 분명합니다.
즉, wchar_t *를 dll에 보내고 mql에서 string &로 받아들입니다.
그러나 어떤 이유로 C-함수는

wcscpy_s( wchar_t *dest, rsize_t dest_size, const wchar_t *src);

제대로 작동하지 않습니다. wchar_t * dest 문자열에 대한 포인터, mql은 허용하지만 간헐적으로 때로는 그렇지 않습니다.
때때로 터미널이 충돌하면 프로그램이 완료됩니다.

기능부

wcscpy( wchar_t *dest,   const wchar_t *src);

터미널은 충돌하지 않지만 간헐적으로 라인이 옵니다.
다음 빌드에서 수정해주세요.

추신. wchar_t * 포인터가 다른 스레드에서 전달되었음을 명확히 하는 것을 잊었습니다.
저것들. wcscpy_s 또는 wcscpy 함수는 별도의 스레드에서 호출됩니다.

 
Roman :

여전히 dll, wichar_t *를 포인터로 문자열을 전달하는 문제로 돌아가십시오.
dll의 문자열 작업에 대한 Renat 의 기사 에서 mql의 문자열 유형이 외부 dll에서 문자열 wichar_t *에 대한 포인터를 수신한다는 것이 분명합니다.
즉, wichar_t *를 dll에 보내고 mql에서 string &로 받아들입니다.
그러나 어떤 이유로 C-함수는

제대로 작동하지 않습니다. wichar_t * dest, mql accepts 문자열에 대한 포인터이지만 간헐적으로 때로는 그렇지 않습니다.
때때로 터미널이 충돌하면 프로그램이 완료됩니다.

기능부

터미널은 충돌하지 않지만 간헐적으로 라인이 옵니다.
다음 빌드에서 수정해주세요.

추신. wichar_t * 포인터가 다른 스레드에서 전달되었음을 명확히 하는 것을 잊었습니다.
저것들. wcscpy_s 또는 wcscpy 함수는 별도의 스레드에서 호출됩니다.

그리고 누가 string dest에 메모리를 할당할까요?
 
Vladimir Simakov :
그리고 누가 string dest에 메모리를 할당할까요?

메모리는 mql 코드에서 다음과 같이 할당됩니다.

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit (out, 165 , 32 );

mql의 문자열이 dll의 wchar_t*이기 때문에 out 및 할당된 메모리 에 대한 포인터로 전달됩니다.

Func( "Task" , out);