오류, 버그, 질문 - 페이지 2501 1...249424952496249724982499250025012502250325042505250625072508...3184 새 코멘트 Igor Makanu 2019.07.07 16:32 #25001 fxsaber : 그렇게 간다 다음과 같이 시도했습니다. const uint FFFF= 0xFFFFFFFF ; //+------------------------------------------------------------------+ struct A pack( 4 ) { ushort j1; ushort j2; }; //+------------------------------------------------------------------+ struct B pack( 8 ) { ushort j1; ushort j2; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ union UnionCheckByte { uint byte_4x4[ 4 ]; A a; B b; }; //+------------------------------------------------------------------+ void OnStart () { UnionCheckByte tst; tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ArrayPrint (tst.byte_4x4); // A Print ( "A:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF A zeroA; ZeroMemory (zeroA); tst.a = zeroA; ArrayPrint (tst.byte_4x4); // B Print ( "B:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF B zeroB; ZeroMemory (zeroB); tst.b = zeroB; ArrayPrint (tst.byte_4x4); Print ( "sizeof(A) = " , sizeof (A), " , sizeof(B) = " , sizeof (B)); } //+------------------------------------------------------------------+ 2019.07.07 18:31:02.708 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295 2019.07.07 18:31:02.708 tst (EURUSD,H1) ㅏ: 2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295 2019.07.07 18:31:02.708 tst (EURUSD,H1) 비: 2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295 2019.07.07 18:31:02.708 tst (EURUSD,H1) sizeof(A) = 4 , sizeof(B) = 4 여전히 처음 4바이트만 0으로 만듭니다. Igor Makanu 2019.07.07 16:42 #25002 또한 다음과 같이 시도했습니다. const uint FFFF= 0xFFFFFFFF ; //+------------------------------------------------------------------+ union UnionCheckByte { uint byte_4x4[ 4 ]; struct uA pack( 4 ) { ushort j1; ushort j2; } a; struct uB pack( 8 ) { ushort j1; ushort j2; } b; }; //+------------------------------------------------------------------+ void OnStart () { UnionCheckByte tst; tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ArrayPrint (tst.byte_4x4); // A Print ( "A:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ZeroMemory (tst.a); ArrayPrint (tst.byte_4x4); // B Print ( "B:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ZeroMemory (tst.b); ArrayPrint (tst.byte_4x4); Print ( "sizeof(A) = " , sizeof (tst.a), " , sizeof(B) = " , sizeof (tst.b)); } //+------------------------------------------------------------------+ 여전히 결과 없음 - 처음 4바이트만 재설정됨 fxsaber 2019.07.07 16:49 #25003 Igor Makanu : 여전히 결과 없음 - 처음 4바이트만 재설정됨 물리적 구조가 4바이트이기 때문입니다. Igor Makanu 2019.07.07 17:02 #25004 fxsaber : 물리적 구조가 4바이트이기 때문입니다. 예, 우리는 이미 pack()이 MQL 내에서 작동하지 않는다는 것을 발견했습니다 - 더 이상 pack() 검사를 위한 옵션이 없습니다 C#에서 .dll을 체크인하려고 생각했지만 매복도 있습니다. MQL은 호출된 함수 의 서명을 봅니다(서명에서 const를 호출할 때 C#을 호출할 수 없었음을 기억하십시오). 데이터를 C#에 전달할 때 유형을 변환할 수 있습니까? 추신: C++에서 최대 .dll 쓰기 - "깨끗한" 데이터를 수신/전송할 수 있습니다. Alexey Viktorov 2019.07.07 17:09 #25005 fxsaber : 문서에 있는지 기억이 안나네요. 덕분에 찾았습니다. 제 생각에는 모든 것이 작동합니다. 귀하의 예에서는 구조에 하나의 유형만 있기 때문에 정렬에 의미가 없습니다. 따라서 유형의 크기만 제공합니다. 그리고 이것이 밝혀진 방법입니다. struct A pack( 4 ) { short j; int z; }; void OnStart () { Print ( sizeof (A)); // 8 } 그리고 그러한 구조 struct A pack( 8 ) { short j; double x; int b; }; void OnStart () { Print ( sizeof (A)); // 24 } 문서는 그림으로 매우 명확하게 설명되어 있습니다. Igor Makanu 2019.07.07 17:23 #25006 Alexey Viktorov : 덕분에 찾았습니다. 제 생각에는 모든 것이 작동합니다. 귀하의 예에서는 구조에 하나의 유형만 있기 때문에 정렬에 의미가 없습니다. 따라서 유형의 크기만 제공합니다. 그리고 이것이 밝혀진 방법입니다. 그리고 그러한 구조 문서는 그림으로 매우 명확하게 설명되어 있습니다. 예, 다음과 같이 작동합니다. const uint FFFF= 0xFFFFFFFF ; //+------------------------------------------------------------------+ union UnionCheckByte { uint byte_4x4[ 4 ]; struct uA pack( 4 ) { ushort j1; ulong j2; } a; struct uB pack( 8 ) { ushort j1; ulong j2; } b; }; //+------------------------------------------------------------------+ void OnStart () { UnionCheckByte tst; tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ArrayPrint (tst.byte_4x4); // A Print ( "A:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ZeroMemory (tst.a); ArrayPrint (tst.byte_4x4); // B Print ( "B:" ); tst.byte_4x4[ 0 ]=FFFF; tst.byte_4x4[ 1 ]=FFFF; tst.byte_4x4[ 2 ]=FFFF; tst.byte_4x4[ 3 ]=FFFF; // заполним память 0xFFFFFFFF FFFFFFFF ZeroMemory (tst.b); ArrayPrint (tst.byte_4x4); Print ( "sizeof(A) = " , sizeof (tst.a), " , sizeof(B) = " , sizeof (tst.b)); } //+------------------------------------------------------------------+ 2019.07.07 19:16:27.100 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295 2019.07.07 19:16:27.100 tst (EURUSD,H1) ㅏ: 2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 4294967295 2019.07.07 19:16:27.100 tst (EURUSD,H1) 비: 2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 0 2019.07.07 19:16:27.100 tst (EURUSD,H1) sizeof(A) = 12 , sizeof(B) = 16 total: pack()은 구조의 데이터를 구조의 최대 필드 sizeof() 크기에 맞춥니다. Alexey Viktorov 2019.07.07 17:29 #25007 Igor Makanu : total: pack()은 구조의 데이터를 구조의 최대 필드 sizeof() 크기에 맞춥니다. 확실히 그런 방식은 아닙니다. struct A pack( 4 ) { short j; double x; int b; }; void OnStart () { Print ( sizeof (A)); // 16 } 최대 필드는 8바이트이고 정렬을 4로 설정하고 16을 얻었습니다. 즉, 2 + 2|4|2 + 2|2 + 짧은 이중 더하기 정수 또는 2 +첨가제| 4|4 |4 Igor Makanu 2019.07.07 17:47 #25008 Alexey Viktorov : 확실히 그런 방식은 아닙니다. 최대 필드는 8바이트이고 정렬을 4로 설정하고 16을 얻었습니다. 즉, 2 + 2|4|2 + 2|2 + short double int 추가 또는 2 +첨가제| 4|4 |4 예, 아마도 다음과 같이 들릴 것입니다. total: pack()은 구조 요소의 데이터를 요소별로 정렬합니다. 각 요소는 구조 요소 의 최대 sizeof()를 고려하여 pack()의 배수로 채워집니다(최대값 이하, 패딩할 때 더 적게) 팩(4) : 짧은 = 2 + 2 보수 = 4 = 팩(4) 더블 = 8 - 정렬하지 않는다 정수 = 4 - 정렬하지 않는다 sizeof() = 16 바이트 Alexey Viktorov 2019.07.07 18:06 #25009 Igor Makanu : 예, 아마도 다음과 같이 들릴 것입니다. total: pack()은 구조 요소의 데이터를 요소별로 정렬합니다. 각 요소는 구조 요소 의 최대 sizeof()를 고려하여 pack()의 배수로 채워집니다(최대값 이하, 패딩할 때 더 적게) 팩(4) : 짧은 = 2 + 2 보수 = 4 = 팩(4) 더블 = 8 - 정렬하지 않는다 정수 = 4 - 정렬하지 않는다 sizeof() = 16 바이트 이상하게 들리지만 알겠습니다. fxsaber 2019.07.07 18:51 #25010 Alexey Viktorov : 이상하게 들리지만 알겠습니다. 거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼 오류, 버그, 질문 fxsaber , 2019.07.07 15:03 메모리 소비와 분명히 성능은 필드의 순서에 따라 다릅니다 . 지금까지는 완전히 이해하지 못했습니다. 1...249424952496249724982499250025012502250325042505250625072508...3184 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그렇게 간다
다음과 같이 시도했습니다.
2019.07.07 18:31:02.708 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) ㅏ:
2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) 비:
2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) sizeof(A) = 4 , sizeof(B) = 4
여전히 처음 4바이트만 0으로 만듭니다.
또한 다음과 같이 시도했습니다.
여전히 결과 없음 - 처음 4바이트만 재설정됨
여전히 결과 없음 - 처음 4바이트만 재설정됨
물리적 구조가 4바이트이기 때문입니다.
물리적 구조가 4바이트이기 때문입니다.
예, 우리는 이미 pack()이 MQL 내에서 작동하지 않는다는 것을 발견했습니다 - 더 이상 pack() 검사를 위한 옵션이 없습니다
C#에서 .dll을 체크인하려고 생각했지만 매복도 있습니다. MQL은 호출된 함수 의 서명을 봅니다(서명에서 const를 호출할 때 C#을 호출할 수 없었음을 기억하십시오).
데이터를 C#에 전달할 때 유형을 변환할 수 있습니까?
추신: C++에서 최대 .dll 쓰기 - "깨끗한" 데이터를 수신/전송할 수 있습니다.
문서에 있는지 기억이 안나네요.
덕분에 찾았습니다. 제 생각에는 모든 것이 작동합니다. 귀하의 예에서는 구조에 하나의 유형만 있기 때문에 정렬에 의미가 없습니다. 따라서 유형의 크기만 제공합니다. 그리고 이것이 밝혀진 방법입니다.
그리고 그러한 구조
문서는 그림으로 매우 명확하게 설명되어 있습니다.
덕분에 찾았습니다. 제 생각에는 모든 것이 작동합니다. 귀하의 예에서는 구조에 하나의 유형만 있기 때문에 정렬에 의미가 없습니다. 따라서 유형의 크기만 제공합니다. 그리고 이것이 밝혀진 방법입니다.
그리고 그러한 구조
문서는 그림으로 매우 명확하게 설명되어 있습니다.
예, 다음과 같이 작동합니다.
2019.07.07 19:16:27.100 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295
2019.07.07 19:16:27.100 tst (EURUSD,H1) ㅏ:
2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 4294967295
2019.07.07 19:16:27.100 tst (EURUSD,H1) 비:
2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 0
2019.07.07 19:16:27.100 tst (EURUSD,H1) sizeof(A) = 12 , sizeof(B) = 16
total: pack()은 구조의 데이터를 구조의 최대 필드 sizeof() 크기에 맞춥니다.
total: pack()은 구조의 데이터를 구조의 최대 필드 sizeof() 크기에 맞춥니다.
확실히 그런 방식은 아닙니다.
최대 필드는 8바이트이고 정렬을 4로 설정하고 16을 얻었습니다. 즉, 2 + 2|4|2 + 2|2 + 짧은 이중 더하기 정수
또는 2 +첨가제| 4|4 |4
확실히 그런 방식은 아닙니다.
최대 필드는 8바이트이고 정렬을 4로 설정하고 16을 얻었습니다. 즉, 2 + 2|4|2 + 2|2 + short double int 추가
또는 2 +첨가제| 4|4 |4
예, 아마도 다음과 같이 들릴 것입니다.
total: pack()은 구조 요소의 데이터를 요소별로 정렬합니다. 각 요소는 구조 요소 의 최대 sizeof()를 고려하여 pack()의 배수로 채워집니다(최대값 이하, 패딩할 때 더 적게)
팩(4) :
짧은 = 2 + 2 보수 = 4 = 팩(4)
더블 = 8 - 정렬하지 않는다
정수 = 4 - 정렬하지 않는다
sizeof() = 16 바이트
예, 아마도 다음과 같이 들릴 것입니다.
total: pack()은 구조 요소의 데이터를 요소별로 정렬합니다. 각 요소는 구조 요소 의 최대 sizeof()를 고려하여 pack()의 배수로 채워집니다(최대값 이하, 패딩할 때 더 적게)
팩(4) :
짧은 = 2 + 2 보수 = 4 = 팩(4)
더블 = 8 - 정렬하지 않는다
정수 = 4 - 정렬하지 않는다
sizeof() = 16 바이트
이상하게 들리지만 알겠습니다.
이상하게 들리지만 알겠습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
fxsaber , 2019.07.07 15:03
메모리 소비와 분명히 성능은 필드의 순서에 따라 다릅니다 .
지금까지는 완전히 이해하지 못했습니다.