위의 내용을 구현하는 데 몇 가지 어려움을 겪었습니다. 그래서 누군가 비슷한 문제에 직면할 경우를 대비하여 이에 대해 말씀드리겠습니다.
1) x64 터미널을 사용하는 경우 C++ 프로젝트를 x64로 다시 컴파일해야 할 가능성이 높습니다. 안전을 위해 다음과 같은 방법으로 해야 합니다: Visual Studio -> (C++ 프로젝트의) 속성 -> 구성 관리자 -> 드롭다운 목록 또는 <새로...>를 통해 x64로 변경합니다. 컴파일. 완료. 컴파일되지 않으면 프로젝트의 참조를 확인하고 컴파일러 오류를 살펴보세요. 2) EA에 문제가 있었는데 초기화조차 되지 않았습니다. 차트에서 EA를 분리할 때, 초기화에 실패했을 때만 발견했습니다(웃긴...). EA는 초기화 단계에서 무한 절전 모드에 빠졌고 이 줄(QService.mqh)에 관한 것이 전부였습니다:
QService::EnterCriticalSection() { while (GlobalVariableCheck("QService_CriticalSection") > 0) Sleep(1); GlobalVariableTemp("QService_CriticalSection"); }
이 "Sleep(1)"을 이해하려고 디버깅하고 헛된 시도를 한 후 코드를 다음과 같이 교체했습니다:
Hi, I'm a C# developer and downloaded the code from the article "HOW TO EXPORT QUOTES FROM METATRADER 5 TO .NET APPLICATIONS USING WCF SERVICES" ( https://www.mql5.com/en/articles/27 ). The problem is that my machine is a Windows 64 bits with MetaTrader 5 64 bits installed and I had to change the compile configurations to 64 bits in Visual Studio 2012. Ok, it compiled normally, then I added one new method that aims to return a string to MT5 which i called ReadBroker2MeInstructions . Compiled...
몇 시간 동안 조사하고 디버깅한 끝에 참조된 어셈블리 하나가 로드되지 않아 'System.IO.FileNotFoundException' 예외가 발생하는 것을 발견했습니다: 파일 또는 어셈블리 'QExport.Service, Version=1.0.5771.13857, Culture=neutral, PublicKeyToken=56996a45dd1e337b'를 로드할 수 없습니다.""라는 예외가 발생했습니다.
아마도 dll에 구성 파일이 없기 때문에 MT 5는 어셈블리를 어디에서 찾을 수 있는지 몰랐던 것 같습니다. 그래서 기본 경로(메타에디터64.exe가 있는 경로)에서 가져 오려고 했습니다. 참조된 프로젝트의 출력 디렉터리를 해당 경로로 변경한 후 마법처럼 작동했습니다.
1) x64 터미널을 사용하는 경우 C++ 프로젝트를 x64로 다시 컴파일해야 할 가능성이 높습니다. 안전을 위해 다음과 같은 방법으로 해야 합니다: Visual Studio -> (C++ 프로젝트의) 속성 -> 구성 관리자 -> 드롭다운 목록 또는 <새로...>를 통해 x64로 변경합니다. 컴파일. 완료. 컴파일되지 않으면 프로젝트의 참조를 확인하고 컴파일러 오류를 살펴보세요.
2) EA에 문제가 있었는데 초기화조차 되지 않았습니다. 차트에서 EA를 분리할 때, 초기화에 실패했을 때만 발견했습니다(웃긴...). EA는 초기화 단계에서 무한 절전 모드에 빠졌고 이 줄(QService.mqh)에 관한 것이 전부였습니다:
QService::EnterCriticalSection()
{
while (GlobalVariableCheck("QService_CriticalSection") > 0)
Sleep(1);
GlobalVariableTemp("QService_CriticalSection");
}
이 "Sleep(1)"을 이해하려고 디버깅하고 헛된 시도를 한 후 코드를 다음과 같이 교체했습니다:
QService::EnterCriticalSection()
{
if(!GlobalVariableCheck("QService_CriticalSection"))
GlobalVariableTemp("QService_CriticalSection");
}
추신 : 기사 작성자에게 감사드립니다! 모든 것이 멋지다!
매우 흥미롭네요... 감사합니다... 하지만 오늘은 더 간단한 옵션*이 있을까요????
물론 있습니다 - 단말기에 내장된 기능을 통한 연결을 사용합니다. 파이프 채널입니다.
https://www.mql5.com/ru/docs/files/fileopen
방금 이 글을 기반으로 새 작업을 게시했습니다: https: //www.mql5.com/en/job/34392.
내 MT5 64 비트 환경에서 작동하지 않습니다 ...
좋은 글입니다!
Thanks
지식을 쌓기 위해 64비트 컴퓨터에서 무슨 일이 일어났는지 알아냈습니다.
몇 시간 동안 조사하고 디버깅한 끝에 참조된 어셈블리 하나가 로드되지 않아 'System.IO.FileNotFoundException' 예외가 발생하는 것을 발견했습니다: 파일 또는 어셈블리 'QExport.Service, Version=1.0.5771.13857, Culture=neutral, PublicKeyToken=56996a45dd1e337b'를 로드할 수 없습니다.""라는 예외가 발생했습니다.
아마도 dll에 구성 파일이 없기 때문에 MT 5는 어셈블리를 어디에서 찾을 수 있는지 몰랐던 것 같습니다. 그래서 기본 경로(메타에디터64.exe가 있는 경로)에서 가져 오려고 했습니다. 참조된 프로젝트의 출력 디렉터리를 해당 경로로 변경한 후 마법처럼 작동했습니다.
안녕하세요, Joe,
x64에서 작동하도록 하는 특별한 트릭이 있나요? 방금 x64 용으로 컴파일했지만 시작시 이상한 오류와 함께 dll이 충돌합니다.
Sabe, 아래 제 답변을 참조하세요.
[]'s
안녕하세요,
완성된 파일을 테스트했는데 MT5에서 모든 것이 정상적으로 보입니다. 하지만 WinClient에 데이터가 없습니다.
과거 막대를 미리 로드하는 비슷한 프로젝트가 있는지 궁금합니다. 이 모든 것을 라이트웨이트 차트에 추가하여 편리하게 차트를 사용하고 싶습니다.