Criação de uma GUI para MQLs em modo gráfico. - página 5

 

Aqui está um exemplo de um formulário simples desenhado em Sharpe em 10 minutos com um EA. O formulário recebe carrapatos do gráfico, diretamente da EA como da dll nativa, sem soquetes, arquivos e outras coisas. E o formulário está anexado à tabela. Há algum problema com a fixação que tem que ser resolvido. Mas é possível não anexá-lo, o que você quiser.

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

Aqui está um exemplo de um formulário simples desenhado em Sharpe em 10 minutos com um EA. O formulário recebe carrapatos do gráfico, diretamente da EA como da dll nativa, sem soquetes, arquivos e outras coisas. E o formulário está anexado à tabela. Há algum problema com a fixação que tem que ser resolvido. Mas não pode ser anexado - o que você quiser.

Diga-me qual compilador de GitHub você usou. Ou você editou afiado compilado à mão? Eu não preciso disso. É mais fácil escrever DLL C++ em código misto (gerenciado + não gerenciado).

 
Yuriy Asaulenko:

Diga-me qual compilador de GitHub você usou. Ou você editou à mão a compilação fragmentada? Não é uma boa idéia. É mais fácil escrever DLL C++ em código misto (gerenciado + não gerenciado).

Eu escrevi no post anterior: tudo é feito com ferramentas internas da VS. Estou usando a Comunidade VS 2017. Logo no início do projeto, a biblioteca DllExport com Nuget está conectada a ele. Nada precisa ser finalizado manualmente após a compilação do projeto, a partir da palavra TOTALMENTE.

Eu não recomendo o modelo deR.Giesecke. Aqui com ele há um verdadeiro pandeiro, se é que de alguma forma será possível começar. Com esta biblioteca você nem vai sentir a diferença. Sua própria dll "torna-se nativa" durante a compilação normal.

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

Eu escrevi no post anterior: tudo é feito com ferramentas internas da VS. Estou usando a Comunidade VS 2017. Logo no início do projeto, a biblioteca DllExport com Nuget está conectada a ele. Nada precisa ser finalizado à mão após a compilação do projeto, a partir da palavra TUDO.

Sim, sim, exatamente com Nuget. Não funcionou para mim, mas havia uma DLL não padrão para interação com o C-API, + mais funções de callback. Não sei, por alguma razão me lembrei disso como um compilador, ou essa era uma solução diferente.

E, neste caso, a solução é realmente boa e simples.

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

Por que a esquerda? Tudo é feito com os meios internos da VS. Nuget tem a biblioteca DllExport, que modifica a classe System.Runtime.InteropServices uma vez, e depois tudo se compila normalmente. Portanto, nenhuma dança de pandeiro é necessária, nenhuma embalagem é necessária. A criação de formulários é muito mais fácil em c# do que escrevê-los em um arquivo adicional, como sugere Maxim. Eu respeito Maxim e seu trabalho, mas neste caso o mundo da Rede está aberto para nós sem dificuldades adicionais.

É interessante, você mesmo já verificou? Eu costumava fazer a conexão MT4 - C++dll - C#dll, eu não conseguia carregar C#dll diretamente.

https://www.nuget.org/packages/DllExport/ é isso?

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...
 
Алексей Барбашин:

Eu escrevi no post anterior: tudo é feito com ferramentas internas da VS. Estou usando a Comunidade VS 2017. Logo no início do projeto, a biblioteca DllExport com Nuget está conectada a ele. Nada precisa ser finalizado manualmente após a compilação do projeto, a palavra TOTALMENTE.

Eu não recomendo o modelo deR.Giesecke. Aqui com ele há um verdadeiro pandeiro, se é que de alguma forma será possível começar. Com esta biblioteca você nem vai sentir a diferença. Sua dll "se tornará nativa" durante a compilação normal.

Tzek, você pode elaborar? A tarefa do exemplo é fazer um painel em C# que recebe informações da EA e lhe envia comandos. Como usar a dllexport para isso?

Não há necessidade de soletrar, apenas passos, o que e como ele reage um ao outro?

 
Alexey Volchanskiy:

Isso é interessante, você mesmo já verificou? Eu costumava fazer MT4 - C++dll - C#dll link, não conseguia carregar C#dll diretamente.

https://www.nuget.org/packages/DllExport/ é isso?

É claro que eu verifiquei. Eu dei um exemplo de criação de dll com o formulário acima.

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

É claro que sim. Eu dei um exemplo de dll com um formulário acima.

Esta foto é um exemplo?

Tudo bem, eu mesmo cuidarei disso.

 
Alexey Volchanskiy:

Tezka, você pode elaborar? A tarefa do exemplo é fazer um painel em C#, que recebe informações da EA e lhe envia comandos. Como usar a dllexport para isso?

Não há necessidade de soletrar, apenas passos, o que e como reagem um com o outro?

1. Criar um projeto em c# Class Library (estrutura líquida)

2. Adicionar a biblioteca DllExport da NuGet ao projeto. É melhor fazer o download a partir do servidor. Coloque o arquivo de lote na pasta do projeto.

3. Lançamos a biblioteca através da linha de comando (há um vídeo no hub) e modificamos a classe System.Runtime.InteropServices.

Neste momento, todos os preparativos estão concluídos. Reinício do projeto

4. Criar uma função de exportação e adicionar o modificador [DllExport]y antes dele. Se a etapa 3 for executada corretamente, o compilador não reclamará do modificador

5. Acrescentar o formulário ao projeto e compô-lo conforme necessário.

6. Adicionar à classe de funções exportadas (criadas no passo 1) a função de abrir o formulário, por exemplo, Start

7. Criar função para abrir formulário, por exemplo OpenDialog, como é feito na função principal ao criar uma aplicação em formulário windows

8. Na função Start, criar um tópico para o qual especificamos a função OpenDialog como o método executável

9. Criar um EA/indicador/script e conectar a dll como de costume. ))

10. chamar a função Iniciar a partir do mql

O formulário será iniciado em uma linha separada e não interromperá o processo em mql, como um diálogo modal normal faria.

A transferência de dados do mql para um formulário é feita da mesma forma que a transferência de dados entre classes e fios do próprio aplicativo.

1. Criar uma função em uma classe a ser exportada que será chamada por mql para transferir dados; por exemplo, SendTick.

Lembre-se que o mql verá apenas aqueles métodos de classe (funções), que têm o modificador [DllExport] instalado.

2. Criar um delegado de evento nesta classe com parâmetros

3. No formulário, precisamos inscrever-nos no evento da classe exportada

4. Quando chamamos o método SendTick da mql, chamamos o evento criado e passamos os parâmetros

5. No formulário, criamos um manipulador de eventos que intercepta o evento e envia os dados para o formulário, ou faz outra coisa.

Isso é tudo. Nada mais é necessário.

No caso de o formulário e a classe de exportação estarem trabalhando em fios diferentes, então para colocar informações no formulário precisamos de um delegado de processamento de dados do fio adjacente.

Se você tiver sucesso, por favor, compartilhe o "resultado" e as impressões sobre a simplicidade. )))

O mais "difícil" em tudo isso será a instalação da biblioteca. )))

 
Alexey Volchanskiy:

Esta foto é um exemplo?

Estou vendo, eu mesmo vou descobrir.

Alexey, eu detalhei o quadro. )) Se você tiver mais alguma pergunta, me faça, eu tentarei respondê-las!

Razão: