라이브러리: DLL 없는 파일 매핑 - 페이지 8 123456789101112 새 코멘트 Dmitry Luck'janenko 2016.03.04 18:42 #71 o_O: CMemMapFile::Open이 오류 코드를 반환하거나 오류가 없는 경우 0을 반환한다고 썼습니다.대화 초반에 CMemMapFile::Open 함수가 반환하는 내용의 스크린샷을 올렸습니다.오류가 없는 것처럼 0이었습니다.그런 다음 핸들이 NULL인지 확인하기 위해 수정했습니다.Print(__FILE__,", handle=",MapFile.m_hmem);그 결과 다음과 같은 결과를 얻었습니다.2016.03.04 19:00:00.897 BuyNow 클라이언트 v 1.03 USDCHF.m,M5: BuyNow 클라이언트 v 1.03.mq4, handle=8589934592오류도 없고, 핸들도 있고, 뭐가 더 필요하냐고 말할 수도 있겠지만... 하지만 아무도 파일 디스플레이를 만들지 않았습니다... 그리고 생성되지 않은 매핑을 여는 것은 불가능합니다.또는이 매핑은 다른 사람이 만들었고 나는 그것에 대해 모를 수도 있습니다????.어떤 프로그램은 이 정확한 이름으로 디스플레이를 만듭니다 :-)#define HADER "BuyNow v10" CMemMapFile MapFile; long handl; int OnInit() { //--- 타이머 생성 //--- EventSetMillisecondTimer(Timer); handl=MapFile.Open(StringConcatenate("Local\\","_",HADER,"_",GetSymbol(),"_",((ServerAccauntNumber==0) ? AccountNumber():ServerAccauntNumber)),BUF_SIZE+HEAD_MEM,modeOpen); Print(__FILE__,", handle=",MapFile.m_hmem); //--- return(INIT_SUCCEEDED); } --- 2016.03.04 18:49 #72 Dmitry Luck'janenko:아니면 이 매핑을 다른 사람이 만들었는데 제가 모르는 것일 수도 있습니다.어떤 프로그램은 그 정확한 이름으로 매핑을 생성합니다 :-) 소프트웨어는 그런 식으로 메모리로만 작동합니다. 한 번에 아무것도 지우지 않습니다. 그래서 오래된 데이터가 남아서 열릴 수 있습니다. 그러나 덮어 쓰면 열리지 않습니다. 여는 사이에 아무 작업도하지 않았을 것입니다. Ihar Senkavets 2016.05.30 04:01 #73 우수한 라이브러리, 뮤텍스와 함께 사용하여 로컬 복사기를 작성했습니다.수신기의 중요한 구성 요소로 파일 크기를 가져와서 루프를 만들었습니다,몇 가지 버그를 발견했습니다 - ArrayOutOfRange 또는 4 바이트 부족.수정됨//------------------------------------------------------------------ Write int CMemMapApi::Write(HANDLE64 hmem, const uchar &buf[], DWORD pos, int sz, DWORD &err) // 지정된 바이트 수를 메모리에 씁니다. { if (hmem==NULL) return(-1); PBYTE64 view=ViewFile(hmem, err); if (view==0 || err!=0) return(-1); // 열리지 않은 경우 DWORD size=GetSize(hmem, err); if (pos+sz>size) { UnViewFile(view); return(-2); }; // 크기가 더 작으면 종료 uchar src[]; ArrayResize(src, size+HEAD_MEM); memcpyX(src, view, size+HEAD_MEM); // 바이트 버퍼를 가져갔습니다. for(int i=0; i<sz; i++) { src[pos+i+HEAD_MEM]=buf[i]; // 메모리에 기록 } memcpyX(view, src, size+HEAD_MEM); // 다시 복사했습니다. UnViewFile(view); // 뷰를 닫았습니다. return(0); // 확인을 반환했습니다. } //------------------------------------------------------------------ Read int CMemMapApi::Read(HANDLE64 hmem, uchar &buf[], DWORD pos, int sz, DWORD &err) // 메모리에서 지정된 바이트 수만큼 읽기 { if (hmem==NULL) return(-1); PBYTE64 view=ViewFile(hmem, err); if (view==0 || err!=0) return(-1); // 열리지 않은 경우 DWORD size=GetSize(hmem, err); // 크기를 얻었습니다. uchar src[]; ArrayResize(src, size+HEAD_MEM); memcpyX(src, view, size+HEAD_MEM); // 바이트 버퍼를 가져갔습니다. ArrayResize(buf, sz); int i=0; for(i=0; i<sz && pos+i<size; i++) { buf[i]=src[pos+i+HEAD_MEM]; // 바이트 읽기 //i++; } UnViewFile(view); // 뷰를 닫았습니다. return(i); // 복사된 바이트 수 } Alex19791979 2016.09.28 13:23 #74 MQL5를 통해 MMF를 생성한 후 글을 쓰고 읽으면 문제가 없습니다.하지만 다른 프로그램으로 MMF를 만들면 쓰기 또는 읽기를 시도할 때 치명적인 오류가 발생합니다.무엇이 문제인가요? Alexey Volchanskiy 2016.09.28 15:59 #75 Alex19791979:MQL5를 통해 MMF를 생성한 후 글을 쓰고 읽으면 문제가 없습니다.하지만 다른 프로그램으로 MMF를 만들면 쓰기 또는 읽기를 시도할 때 치명적인 오류가 발생합니다.무엇이 문제일까요?텔레파시 클럽은 치명적인 오류의 수를 추측하기 위해 열심히 노력하고 있습니다. Alexander Bereznyak 2016.09.28 16:54 #76 Alexey Volchanskiy: 텔레파시 클럽은 치명적인 오류의 수를 추측하기 위해 긴장하고 있습니다. 토픽스타터가 텔레파시의 영향력으로부터 차단되었습니다. Alex19791979 2016.09.28 19:18 #77 오류 코드가 없는 MT5 치명적인 오류 메시지. 코드가 있으면 표시됩니다. --- 2016.09.28 19:59 #78 Alex19791979:하지만 다른 프로그램에서 MMF를 만들었는데 이 프로그램에서 쓰거나 읽으려고 하면 심각한 오류가 발생합니다.무엇이 문제인가요?- 파일을 열 때 오류가 없는지 확인- 배열/ 문자열 작업의 모든 기능에서 읽기/쓰기에 사용 가능한 할당된 볼륨을 확인합니다(2바이트 고려) 등. Alex19791979 2016.09.29 23:53 #79 문제가 해결되었습니다.타사 애플리케이션에서 MMF 파일을 0이 아닌 4바이트부터 시작하여 쓰고 읽어야 합니다.그리고 MT5의 경우 오프셋이 0이더라도 4바이트는 계산되지 않습니다.그렇기 때문에 타사 프로그램에서 0바이트부터 쓰면 MT5를 읽으려고 할 때 오류가 발생했습니다. --- 2016.09.30 08:49 #80 Alex19791979:문제가 해결되었습니다.타사 애플리케이션에서 MMF 파일을 0이 아닌 4바이트부터 시작하여 쓰고 읽어야 합니다.그리고 MT5의 경우 오프셋이 0이더라도 4바이트는 계산되지 않습니다.그래서 0바이트부터 쓰는 타사 프로그램에서 MT5를 읽으려고 할 때 오류가 발생했습니다. 클래스의 첫 바이트가 파일 크기가 저장되는 헤더에 할당된다는 점을 고려하지 않으셨나요? 123456789101112 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
CMemMapFile::Open이 오류 코드를 반환하거나 오류가 없는 경우 0을 반환한다고 썼습니다.
대화 초반에 CMemMapFile::Open 함수가 반환하는 내용의 스크린샷을 올렸습니다.
오류가 없는 것처럼 0이었습니다.
그런 다음 핸들이 NULL인지 확인하기 위해 수정했습니다.
그 결과 다음과 같은 결과를 얻었습니다.
2016.03.04 19:00:00.897 BuyNow 클라이언트 v 1.03 USDCHF.m,M5: BuyNow 클라이언트 v 1.03.mq4, handle=8589934592
오류도 없고, 핸들도 있고, 뭐가 더 필요하냐고 말할 수도 있겠지만... 하지만 아무도 파일 디스플레이를 만들지 않았습니다... 그리고 생성되지 않은 매핑을 여는 것은 불가능합니다.
또는이 매핑은 다른 사람이 만들었고 나는 그것에 대해 모를 수도 있습니다????.
어떤 프로그램은 이 정확한 이름으로 디스플레이를 만듭니다 :-)
Dmitry Luck'janenko:
아니면 이 매핑을 다른 사람이 만들었는데 제가 모르는 것일 수도 있습니다.
어떤 프로그램은 그 정확한 이름으로 매핑을 생성합니다 :-)
소프트웨어는 그런 식으로 메모리로만 작동합니다. 한 번에 아무것도 지우지 않습니다. 그래서 오래된 데이터가 남아서 열릴 수 있습니다. 그러나 덮어 쓰면 열리지 않습니다. 여는 사이에 아무 작업도하지 않았을 것입니다.
우수한 라이브러리, 뮤텍스와 함께 사용하여 로컬 복사기를 작성했습니다.
수신기의 중요한 구성 요소로 파일 크기를 가져와서 루프를 만들었습니다,
몇 가지 버그를 발견했습니다 - ArrayOutOfRange 또는 4 바이트 부족.
수정됨
MQL5를 통해 MMF를 생성한 후 글을 쓰고 읽으면 문제가 없습니다.
하지만 다른 프로그램으로 MMF를 만들면 쓰기 또는 읽기를 시도할 때 치명적인 오류가 발생합니다.
무엇이 문제인가요?
MQL5를 통해 MMF를 생성한 후 글을 쓰고 읽으면 문제가 없습니다.
하지만 다른 프로그램으로 MMF를 만들면 쓰기 또는 읽기를 시도할 때 치명적인 오류가 발생합니다.
무엇이 문제일까요?
텔레파시 클럽은 치명적인 오류의 수를 추측하기 위해 열심히 노력하고 있습니다.
텔레파시 클럽은 치명적인 오류의 수를 추측하기 위해 긴장하고 있습니다.
오류 코드가 없는 MT5 치명적인 오류 메시지. 코드가 있으면 표시됩니다.
하지만 다른 프로그램에서 MMF를 만들었는데 이 프로그램에서 쓰거나 읽으려고 하면 심각한 오류가 발생합니다.
무엇이 문제인가요?
- 파일을 열 때 오류가 없는지 확인
- 배열/ 문자열 작업의 모든 기능에서 읽기/쓰기에 사용 가능한 할당된 볼륨을 확인합니다(2바이트 고려)
등.
문제가 해결되었습니다.
타사 애플리케이션에서 MMF 파일을 0이 아닌 4바이트부터 시작하여 쓰고 읽어야 합니다.
그리고 MT5의 경우 오프셋이 0이더라도 4바이트는 계산되지 않습니다.
그렇기 때문에 타사 프로그램에서 0바이트부터 쓰면 MT5를 읽으려고 할 때 오류가 발생했습니다.
문제가 해결되었습니다.
타사 애플리케이션에서 MMF 파일을 0이 아닌 4바이트부터 시작하여 쓰고 읽어야 합니다.
그리고 MT5의 경우 오프셋이 0이더라도 4바이트는 계산되지 않습니다.
그래서 0바이트부터 쓰는 타사 프로그램에서 MT5를 읽으려고 할 때 오류가 발생했습니다.