내 코드에 클래스를 적용하는 동안 다음과 같은 문제가 발생했습니다. 공유 메모리 크기가 4096 바이트보다 큰 경우 CMemMapApi::쓰기 / 읽기 (memmaplib.mqh의 219 및 231 줄)의 memcpyX에 "액세스 위반"이 표시됩니다. memcpy가 읽기 메모리 블록을 4KB보다 크게 '만들기' 위해 "어디를 파헤쳐야 하는지" 알려주시겠습니까?
Microsoft에 따르면 DWORD <0이 조건 인 메서드에서는 DWORD가 0보다 작을 수 없기 때문에 경고가 표시됩니다. 물론 이것은 특히 일부 메서드의 논리를 조정할 수 있기 때문에 필수적인 것은 아닙니다. 일반적으로 저는 이 두 가지 클래스가 마음에 들었습니다 :)
표준은 표준이므로 더 이상 언급할 필요가 없습니다. 오류가 발생하면 개발자에게 보고하세요. 다른 방법은 없습니다.
표준 바이블에서 이 호출은 GetLastError입니다.
하지만 다음과 같아야 합니다 ::GetLastError.
그렇지 않으면 kernel32::GetLastError는 버그입니다.
어떻게 수정하지 않나요?
어떻게 편집하지 않을 수 있나요?
암시하고 보여주고 썼습니다.
#import
int GetLastError(int )
---
그리고 그게 다입니다. 컨텍스트는 자유입니다.
이런 식으로 하고 싶지 않다면 RtlGetLastError도 비슷합니다.
암시하고 보여드리고 썼습니다.
#import
int GetLastError(int )
---
여기까지입니다. 컨텍스트는 자유입니다.
그런 식으로 하고 싶지 않다면 RtlGetLastError도 비슷합니다.
이런 식으로 하고 싶지 않으세요 - RtlGetLastError - 비슷합니다.
저자의 노고에 경의를 표합니다. 저자가 괜찮다면 이 두 클래스를 제 SCL 클래스 라이브러리에 포함하겠습니다.
그러나 이 클래스에는 알고리즘에서 다른 오류를 일으키는 표준 Microsoft 유형을 정의하는 측면에서 오류가 있습니다. 예를 들어 DWORD 유형은 int가 아니라 uint입니다. 이 때문에 클래스에서 일부 알고리즘을 수정해야 했지만 그리 어렵지는 않았습니다.
_Konstantin_:
예를 들어 DWORD 유형은 int가 아니라 uint입니다.
비트는 동일합니다. 이것은 호출에 충분합니다.
스레드 안전이 어떻게 구현되는지 잘 이해가 되지 않나요? 여러 프로세스가 동시에 쓰고 읽는다고 가정해 봅시다. 논리적으로는 Lockfile과 같은 것이 있어야 하지만 라이브러리에서 찾지 못했습니다. 아니면 이미 winapi 수준에서 구현되어 있나요?
이론적으로 코드가 다른 프로세스에서 실행될 수 있기 때문에 lib에는 섹션 바인딩이 없습니다.
이를 제어하려면 변형 또는 https://www.mql5.com/ko/code/1835 을 사용하세요 .