라이브러리: DLL 없는 파일 매핑 - 페이지 6

 
TheXpert:
표준은 표준이므로 더 이상 언급할 필요가 없습니다. 오류가 발생하면 개발자에게 보고하세요. 다른 방법은 없습니다.

표준 바이블에서 이 호출은 GetLastError입니다.

하지만 다음과 같아야 합니다 ::GetLastError.

그렇지 않으면 kernel32::GetLastError는 버그입니다.

어떻게 수정하지 않나요?

 
Urain:

어떻게 편집하지 않을 수 있나요?

암시하고 보여주고 썼습니다.

#import

int GetLastError(int )

---

그리고 그게 다입니다. 컨텍스트는 자유입니다.

이런 식으로 하고 싶지 않다면 RtlGetLastError도 비슷합니다.

 
sergeev:

암시하고 보여드리고 썼습니다.

#import

int GetLastError(int )

---

여기까지입니다. 컨텍스트는 자유입니다.

그런 식으로 하고 싶지 않다면 RtlGetLastError도 비슷합니다.

예, 저는 처음부터 힌트를 이해합니다. MQ 개발자 만이 우리에게주의를 기울이고 그렇지 않으면 아무도 코딩하지 않고 사람들이 고통받습니다.
 
sergeev:

이런 식으로 하고 싶지 않으세요 - RtlGetLastError - 비슷합니다.

유사하지 않고, 직접 손으로 오류를 재설정해야 합니다.
 
내 코드에 클래스를 적용하는 동안 다음과 같은 문제가 발생했습니다. 공유 메모리 크기가 4096 바이트보다 큰 경우 CMemMapApi::쓰기 / 읽기 (memmaplib.mqh의 219 및 231 줄)의 memcpyX에 "액세스 위반"이 표시됩니다. memcpy가 읽기 메모리 블록을 4KB보다 크게 '만들기' 위해 "어디를 파헤쳐야 하는지" 알려주시겠습니까?
[삭제]  

저자의 노고에 경의를 표합니다. 저자가 괜찮다면 이 두 클래스를 제 SCL 클래스 라이브러리에 포함하겠습니다.

그러나 이 클래스에는 알고리즘에서 다른 오류를 일으키는 표준 Microsoft 유형을 정의하는 측면에서 오류가 있습니다. 예를 들어 DWORD 유형은 int가 아니라 uint입니다. 이 때문에 클래스에서 일부 알고리즘을 수정해야 했지만 그리 어렵지는 않았습니다.

 

_Konstantin_:

예를 들어 DWORD 유형은 int가 아니라 uint입니다.

비트 수는 동일합니다. 이 정도면
[삭제]  
sergeev:
비트는 동일합니다. 이것은 호출에 충분합니다.
Microsoft에 따르면 DWORD <0이 조건 인 메서드에서는 DWORD가 0보다 작을 수 없기 때문에 경고가 표시됩니다. 물론 이것은 특히 일부 메서드의 논리를 조정할 수 있기 때문에 필수적인 것은 아닙니다. 일반적으로 저는 이 두 가지 클래스가 마음에 들었습니다 :)
 
스레드 안전이 어떻게 구현되는지 잘 이해가 되지 않나요? 여러 프로세스가 동시에 쓰고 읽는다고 가정해 봅시다. 논리적으로는 Lockfile과 같은 것이 있어야 하지만 라이브러리에서 찾지 못했습니다. 아니면 이미 winapi 수준에서 구현되어 있나요?
 
Al_key:
스레드 안전이 어떻게 구현되는지 잘 이해가 되지 않나요? 여러 프로세스가 동시에 쓰고 읽는다고 가정해 봅시다. 논리적으로는 Lockfile과 같은 것이 있어야 하지만 라이브러리에서 찾지 못했습니다. 아니면 이미 winapi 수준에서 구현되어 있나요?

이론적으로 코드가 다른 프로세스에서 실행될 수 있기 때문에 lib에는 섹션 바인딩이 없습니다.

이를 제어하려면 변형 또는 https://www.mql5.com/ko/code/1835 을 사용하세요 .

Mutex - на чистом WinAPI
Mutex - на чистом WinAPI
  • 투표: 29
  • 2013.08.20
  • o_O
  • www.mql5.com
Синхронизируем процессы ОС/EA/MT и т.д. Никаких самописных DLL. Настало время держать все под своим контролем!