그래픽 모드에서 MQL용 GUI 작성. - 페이지 5

 

다음은 EA로 10분 만에 샤프에 간단한 모양을 그린 예입니다. 이 양식은 소켓, 파일 등이 없는 기본 dll과 마찬가지로 EA에서 직접 차트에서 틱을 수신합니다. 또한 양식은 차트에 첨부되어 있습니다. 첨부 파일에 해결해야 할 몇 가지 문제가 있습니다. 그러나 당신은 그것을 좋아하는 사람을 여기에 붙일 수 없습니다.

 
Алексей Барбашин :

다음은 EA로 10분 만에 샤프에 간단한 모양을 그린 예입니다. 이 양식은 소켓, 파일 등이 없는 기본 dll과 마찬가지로 EA에서 직접 차트에서 틱을 수신합니다. 또한 양식은 차트에 첨부되어 있습니다. 첨부 파일에 해결해야 할 몇 가지 문제가 있습니다. 그러나 당신은 그것을 좋아하는 사람을 여기에 붙일 수 없습니다.

GitHub에서 어떤 컴파일러를 사용하셨습니까? 아니면 손으로 날카로운 컴파일을 편집 했습니까? 무화과가 필요합니다. 혼합 코드(관리형 + 비관리형)로 C++ DLL을 작성하는 것이 더 쉽습니다.

 
Yuriy Asaulenko :

GitHub에서 어떤 컴파일러를 사용하셨습니까? 아니면 손으로 날카로운 컴파일을 편집 했습니까? 무화과가 필요합니다. 혼합 코드(관리형 + 비관리형)로 C++ DLL을 작성하는 것이 더 쉽습니다.

나는 이전 포스트에서 썼습니다: 모든 것은 VS의 일반적인 수단으로 이루어집니다. VS 2017 커뮤니티를 사용하고 있습니다. 프로젝트 작업을 시작할 때 Nuget이 포함된 DllExport 라이브러리가 연결되어 있을 뿐입니다. 프로젝트를 컴파일한 후에는 AT ALL이라는 단어에서 손으로 마무리할 필요가 없습니다.

나는 R.Giesecke 의 템플릿을 추천하지 않습니다 . 당신이 시작할 수 있다면 그와 함께 탬버린과 함께하는 실제 춤이 있습니다. 이 라이브러리를 사용하면 차이를 느끼지 못할 것입니다. dll은 일반 컴파일 중에 자체적으로 "네이티브가 됩니다".

 
Алексей Барбашин :

나는 이전 게시물에서 썼습니다. 모든 것은 VS의 일반적인 수단으로 수행됩니다. VS 2017 커뮤니티를 사용하고 있습니다. 프로젝트 작업을 시작할 때 Nuget이 포함된 DllExport 라이브러리가 연결되어 있을 뿐입니다. 프로젝트를 컴파일한 후에는 AT ALL이라는 단어에서 손으로 마무리할 필요가 없습니다.

예, 그렇습니다. 정확히 Nuget이 있습니다. 그것은 나에게 적합하지 않았지만 C-API와 상호 작용하기 위한 비표준 DLL, + 더 많은 콜백 기능이 있었습니다. 잘 모르겠습니다. 어떤 이유에서인지 이것이 컴파일러이거나 다른 솔루션이 있다는 것을 기억합니다.

이 경우 솔루션은 정말 훌륭하고 간단합니다.

 
Алексей Барбашин :

왼쪽이 왜요? 모든 것은 표준 VS 도구로 수행됩니다. Nuget에는 System.Runtime.InteropServices 클래스를 어셈블리의 일부로 수정한 다음 모든 것이 정상적으로 컴파일되는 DllExport 라이브러리가 있습니다. 따라서 탬버린 춤이 필요하지 않으며 래퍼가 필요하지 않습니다. Maxim이 제안한 대로 양식을 만드는 것은 C#에서 추가 파일에 작성하는 것보다 훨씬 쉽습니다. 나는 Maxim과 그의 작업을 존경하지만, 이 경우 Net의 세계는 추가적인 어려움 없이 우리에게 열려 있습니다.

흥미롭네요 직접 확인하셨나요? MT4 - C ++ dll - C # dll을 한 번 연결했는데 C # dll을 직접 로드할 수 없었습니다.

https://www.nuget.org/packages/DllExport/ - 맞습니까?

DllExport 1.6.0
DllExport 1.6.0
  • www.nuget.org
The open implementation of unmanaged exports for .NET ( DllExport )        Source code and all details here: https://github.com/3F/DllExport                To configure projects via current package:        ========================================================        DllExport -action Configure -dxp-version 1.6.0...
 
Алексей Барбашин :

나는 이전 포스트에서 썼습니다: 모든 것은 VS의 일반적인 수단으로 이루어집니다. VS 2017 커뮤니티를 사용하고 있습니다. 프로젝트 작업을 시작할 때 Nuget이 포함된 DllExport 라이브러리가 연결되어 있을 뿐입니다. 프로젝트를 컴파일한 후에는 AT ALL이라는 단어에서 손으로 마무리할 필요가 없습니다.

나는 R.Giesecke 의 템플릿을 추천하지 않습니다 . 당신이 시작할 수 있다면 그와 함께 탬버린과 함께하는 실제 춤이 있습니다. 이 라이브러리를 사용하면 차이를 느끼지 못할 것입니다. dll은 일반 컴파일 중에 자체적으로 "네이티브가 됩니다".

동명, 좀 더 구체적으로 말씀해 주시겠습니까? 예제의 작업은 조언자로부터 정보를 받고 명령을 보내는 C#의 패널을 만드는 것입니다. 이를 위해 dllexport를 사용하는 방법은 무엇입니까?

씹을 필요도 없고 밟기만 하면 서로 무엇과 어떻게 반응할까요?

 
Alexey Volchanskiy :

흥미롭네요 직접 확인하셨나요? MT4 - C ++ dll - C # dll을 한 번 연결했는데 C # dll을 직접 로드할 수 없었습니다.

https://www.nuget.org/packages/DllExport/ - 맞습니까?

물론 확인했습니다. 위의 형식으로 dll을 생성하는 예를 들었습니다.

 
Алексей Барбашин :

물론 확인했습니다. 위의 형식으로 dll을 생성하는 예를 들었습니다.

이 사진이 예시인가요?

좋아, 내가 알아서 할게.

 
Alexey Volchanskiy :

동명, 좀 더 구체적으로 말씀해 주시겠습니까? 예제의 작업은 조언자로부터 정보를 받고 명령을 보내는 C#의 패널을 만드는 것입니다. 이를 위해 dllexport를 사용하는 방법은 무엇입니까?

씹을 필요도 없고 밟기만 하면 서로 무엇과 어떻게 반응할까요?

1. C# 클래스 라이브러리(net Framework)에서 프로젝트 생성

2. NuGet의 DllExport 라이브러리를 프로젝트에 추가합니다. 서버에서 다운로드하는 것이 좋습니다. 프로젝트 폴더에 배치 파일을 넣습니다.

3. 명령줄을 통해 이 라이브러리를 실행하고(허브에 비디오가 있음) System.Runtime.InteropServices 클래스를 수정합니다.

이것으로 모든 준비가 끝났습니다. 프로젝트 다시 시작

4. 내보낸 함수를 생성하고 그 앞에 [DllExport] 수식어를 지정합니다.3단계가 올바르게 수행되면 컴파일러는 수식어를 맹세하지 않습니다.

5. 프로젝트에 양식을 추가하고 필요에 따라 정렬합니다.

6. 내보낸 함수의 클래스(1단계에서 생성)에 양식 열기 함수를 추가합니다(예: 시작).

7. 우리는 윈도우 폼에서 애플리케이션을 생성할 때 메인 함수에서 수행되는 것처럼 OpenDialog와 같은 폼 열기 함수를 생성합니다.

8. 시작 기능에서 OpenDialog 기능을 실행 가능한 메서드로 지정하는 스레드를 만듭니다.

9. Expert Advisor/indicator/script를 생성하고 평소와 같이 dll을 연결합니다. ))

10 mql에서 시작 함수 호출

이 양식은 별도의 스레드에서 실행되며 일반 모달 대화 상자처럼 mql에서 프로세스가 중지되지 않습니다.

mql에서 폼으로 데이터를 전달하는 것은 애플리케이션 자체의 클래스와 스레드 간에 데이터를 전달하는 것과 같은 방식으로 수행됩니다.

1. mql이 데이터 전송을 위해 호출할 "내보낸" 클래스에 함수를 만듭니다(예: SendTick).

mql은 [DllExport] 수정자가 설정된 클래스 메서드(함수)만 볼 수 있음을 기억해야 합니다.

2. 이 클래스의 매개변수를 사용하여 이벤트 대리자를 만듭니다.

3. 양식에서 내보내기 클래스 이벤트를 구독하십시오.

4. mql에서 SendTick 메서드를 호출할 때 생성된 이벤트를 호출하여 매개변수를 전달합니다.

5. 폼에서 생성된 핸들러로 "이벤트를 가로채고" 폼에 데이터를 표시하거나 다른 작업을 수행합니다.

모두. 다른 것은 필요하지 않습니다.

만일을 대비하여 양식과 내보내기 클래스가 다른 스레드에서 작동하므로 양식에 정보를 배치하려면 이웃 스레드의 데이터 처리 대리자가 필요합니다.

성공한 사람은 "결과"와 단순함의 느낌을 공유하십시오. )))

이 모든 사업에서 가장 "어려운" 것은 도서관 설치일 것입니다. )))

 
Alexey Volchanskiy :

이 사진이 예시인가요?

좋아, 내가 알아서 할게.

알렉세이, 자세히 그렸습니다. )) 그래도 질문이 있으시면 질문해 주시면 답변해 드리겠습니다!