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

 
o_O:

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

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

뮤텍스의 이름을 지정하면 메타트레이더뿐만 아니라 모든 프로세스에서 해당 핸들을 가져올 수 있다는 것을 올바르게 이해했나요?
 
Al_key:
뮤텍스의 이름을 지정하면 메타트레이더뿐만 아니라 모든 프로세스에서 핸들을 가져올 수 있다는 것을 올바르게 이해했나요?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686931%28v=vs.85%29.aspx 제가 직접 답을 찾았습니다. 실제로 프로세스 간에 공유할 수 있습니다.
 

작성자에게 질문합니다.

저는 MT4에서 수업을 사용합니다. 터미널을 껐다가 켜면 모든 것이 작동을 멈춥니다. 전원을 끄기 전에 전문가 조언자를 삭제하고 터미널을 켠 후에 첨부하는 방법은 그리 편리하지 않습니다. 이 문제를 피할 수 있는 방법이 있나요?

그리고 두 번째. 델파이로 작성된 프로그램에서 만든 파일 매핑을 읽을 수 없습니다. 뉘앙스는 무엇일까요?

간단히 말해서, 이들은 많은 터미널에서 작동하는 거래 패널입니다.

 
Dmitry Luck'janenko:


단말기를 껐다가 켜면 모든 것이 작동을 멈춥니다. 전원을 끄기 전에 EA를 삭제하고 단말기를 켠 후 다시 부착하는 방법은 그리 편리하지 않습니다. 이 문제를 해결할 수 있는 방법이 있나요?

이러한 초기화 중에 파일에 어떤 일이 발생하는지 로깅하고 확인해야 합니다. 잠금이 없습니다.

파일 매핑을 읽을 수 없습니다.

winapi에서 "읽기"는 어떤 기능을 의미하나요?

 
o_O:

이러한 초기화 중에 파일에 어떤 일이 발생하는지 기록하고 확인해야 합니다. 잠금이 없습니다.

winapi에서 "읽기"는 어떤 기능을 의미하나요?

문제는 함수

HANDLE64 CMemMapFile::Open(LPTSTR path, DWORD size, int mode=modeOpen)

함수는 항상 0을 반환합니다.


그래서 파일이 열려 있는지 알 수 없습니다.

위 그림은 아직 생성되지 않은 파일 매핑을 여는 Expert Advisor의 로그입니다. 그리고 오류는 없습니다.

아마도 함수

CMemMapFile::Open

함수를 OnInit()이 아닌 다른 곳, 예를 들어 OnTick()에 삽입해야 하지만 반환되는 핸들이 항상 0이기 때문에 틱할 때마다 파일이 계속 열리지 않도록 확인할 수 있는 방법이 없습니다.

그리고 두 번째 질문입니다.

델파이에서 파일 매핑을 생성하는 애플리케이션을 만듭니다. 연결할 때 오류가 발생합니다. 즉 숫자가 올바르게 전달되지 않았습니다. 나는 {$ 정렬 끄기}로 정렬을 시작했습니다.

'msvcrt.dll'에서 0x04E91000으로 읽은 액세스 위반과 같은 다른 오류가 발생했습니다.

이제 데이터가 19바이트씩 정상적으로 정렬됩니다 - "00:35:50.260 Panel v 1.00 GBPUSD.m,M5: OnInitsizeof(PipeData)= 19".


하지만 읽을 때는 모든 데이터가 0입니다.

 
Dmitry Luck'janenko:

문제는 함수

함수는 항상 0을 반환한다는 것입니다.

그래서 파일이 열려 있는지 알 수 없습니다.

맞습니다, CMemMapFile::Open은 오류 코드를 반환하거나 오류가 없으면 0을 반환합니다.

(열린 핸들을 반환하고 전달된 매개 변수에 오류를 기록하는 CMemMapApi: 와 달리).

그리고 핸들은 m_hmem에 있습니다.



델파이에서 파일 매핑을 생성하는 애플리케이션을 만듭니다. 연결할 때 오류가 발생합니다. 즉 숫자가 올바르게 전달되지 않았습니다.

파일 시작 부분에 예약 된 DWORD 바이트를 고려합니까?
 
o_O:


파일 시작 부분에 예약된 DWORD 바이트를 고려하나요?
4 바이트? 시도해 볼게요, 안 했어요.
 
Dmitry Luck'janenko:
4바이트? 제가 세어볼게요, 세어보지 않았어요.

소스에서 파일이 어떻게 쓰여지거나 생성되는지 살펴보세요.

m_size 매개변수에서

 
o_O:

가 맞으면 CMemMapFile::Open은 오류 코드를 반환하고, 오류가 없으면 0을 반환합니다.

(열린 핸들을 반환하고 전달된 매개변수에 오류를 기록하는 CMemMapApi: 와 달리).

그리고 핸들은 m_hmem에 있습니다.


파일 시작 부분에 예약된 DWORD 바이트를 고려하나요?
2016.03.04 19:00:00.897 BuyNow 클라이언트 v 1.03 USDCHF.m,M5: BuyNow 클라이언트 v 1.03.mq4, handle=8589934592


은 존재하지 않는 파일 매핑을 열 때 m_hmem입니다. 이것이 오류인지 핸들인지 어떻게 확인하나요?

 
Dmitry Luck'janenko:

은 존재하지 않는 파일 매핑을 열 때 m_hmem입니다. 오류인지 핸들인지 확인하는 방법은 무엇인가요?

CMemMapFile::Open은 오류 코드 또는 오류가 없는 경우 0을 반환한다고 썼습니다.