Discussão do artigo "Criando interfaces gráficas para EAs e indicadores baseados no .Net Framework e C#" - página 14

 

Um exemplo é fornecido no anúncio https://www.metatrader5.com/ru/releasenotes/terminal/1898.

MQL5

  1. Adicionado suporte nativo para bibliotecas .NET com importação "inteligente" de funções. Agora você pode usar as bibliotecas .NET sem escrever invólucros especiais - o MetaEditor se encarrega disso.

    Para trabalhar com as funções da biblioteca .NET, basta importar a própria DLL sem especificar funções específicas. O MetaEditor importa automaticamente todas as funções com as quais é possível trabalhar:
    .
    • Estruturas simples (POD, plain old data) - estruturas que contêm apenas tipos de dados simples.
    • Funções estáticas públicas, nos parâmetros das quais são usados apenas tipos simples e estruturas POD ou suas matrizes
      .

    Para chamar funções da biblioteca, basta importá-las:
    .
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Função de início do programa de script|
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    O código C# da função Inc da classe TestClass tem a seguinte aparência:
    .
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    O script retornará o valor 42.

    O trabalho de suporte às bibliotecas .NET está em andamento, e futuras versões estão planejadas para expandir seu uso.

  2. O suporte para trabalhar com funções WinAPI foi adicionado à biblioteca padrão. Agora não é mais necessário importar manualmente as bibliotecas e descrever as assinaturas das funções para usar as funções do sistema operacional em um programa MQL5. Basta conectar o arquivo de cabeçalho do catálogo MQL5\Include/WinAPI.

    As funções WinAPI são agrupadas em arquivos separados por finalidade:

    .
    • libloaderapi.mqh - trabalhando com recursos
    • memoryapi.mqh - manipulação de memória
    • processenv.mqh - trabalho com o ambiente
    • processthreadsapi.mqh - trabalho com processos
    • securitybaseapi.mqh - trabalha com o sistema de segurança do sistema operacional
    • sysinfoapi.mqh - obter informações do sistema
    • winbase.mqh - funções gerais
    • windef.mqh - constantes, estruturas e enumerações
    • wingdi.mqh - trabalhando com objetos gráficos
    • winnt.mqh - tratamento de exceções
    • winreg.mqh - trabalho com registro
    • winuser.mqh - gerenciamento de janelas e interfaces
    • errhandlingapi.mqh - tratamento de erros
    • fileapi.mqh - manipulação de arquivos
    • handleapi.mqh - manipulação de alças
    • winapi.mqh - conexão de todas as funções (arquivos de cabeçalho WinAPI).

    A associação funciona somente com arquitetura de 64 bits.


MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.26
  • MetaQuotes
  • www.metatrader5.com
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
 
Nextor o Visual Studio 2022, criei um formulário com um botão, executei-o no MetaTrader 5 e recebi um erro....

Na comunidadedo Visual Studio 2019, tudo funciona como o autor fez, mas quando ele escreve:

"Cada formulário tem uma lista pública de elementos que ele contém. Percorrendo a lista de elementos, o método encontra aqueles que o controlador é capaz de suportar e assina os eventos de que precisa. Se um elemento do formulário não for compatível com o controlador, ele será simplesmente ignorado. "

Infelizmente, se você colocar um SplitContainer ou DataGridView no formulário de teste, o formulário não iniciará, não está claro por que, mas um componente tão complexo como o Chart STARTED.

Incluo um exemplo de teste de quais componentes podem ser usados para modificação (embora o formulário seja iniciado!).

Arquivos anexados:
TESTGUIC.zip  706 kb
 

ao tentar criar um controlador GuiController controller = new GuiController(assembly, form, m_global_events);
dá Unexpected exception: The key with this name already exists (for DataGridView) e o controlador NÃO é criado (o formulário é criado, provavelmente pode ser exibido, mas sem o controlador como controlá-lo?)

Mais uma vez, tudo está OK se não houver componentes SplitContainer e/ou DataGridView.

 
Nikolai Karetnikov #:

talvez outra pessoa tropece

este é o local no artigo

"Como você pode ver, o compilador entende as enumerações externas definidas nas bibliotecas de rede e sabe como trabalhar com elas."

Não sei por qual motivo, mas o compilador se recusa obstinadamente a entender as enumerações do C#, então arrastamos a enumeração do C# para o Mql5 e tudo funciona.

Só que, Vasily, você colocou os botões Comprar e Vender no painel de negociação ao contrário))

Mas, em geral, o resultado foi muito legal. Obrigado por seu trabalho árduo!)

Eu tive o mesmo problema.

Resolvi o problema de forma um pouco diferente: em vez de ClickOnElement, escrevi GuiEventType::ClickOnElement. Depois disso, ele compila e funciona sem problemas. Mas, se esse for o caso, não está claro como funcionou para o Vasily. Talvez eu tenha feito algo errado...

Mas, fora isso, a coisa é realmente necessária e útil. É uma pena que a MQL5 não tenha algo semelhante (embutido).

 
MQL_User #:

Eu tive o mesmo problema.

Resolvi o problema de forma um pouco diferente: em vez de ClickOnElement, escrevi GuiEventType::ClickOnElement. E depois disso ele compila e funciona sem problemas. Mas, se esse for o caso, não está claro como funcionou para o Vasily. Talvez eu tenha feito algo errado...

Mas, fora isso, a coisa é realmente necessária e útil. É uma pena que a MQL5 não tenha algo semelhante (embutido).

Eu tive um erro desse tipo:

@MQL_User, fiz como você fez: " ...instead of ClickOnElement wrote GuiEventType::ClickOnElement" - tudo funcionou!

 
Mano parâmetros de entrada e saída de marshalling.

Isso não funciona no MT4. Tentei sem nenhum resultado.

 
Pete #:

Sou relativamente novo em MQL5 e aprendi muito com este artigo! Muito obrigado!


Tenho uma pergunta. Nos últimos dois dias, tenho me esforçado um pouco para entender isso.


Concluí cada etapa com êxito algumas vezes, mesmo em outro computador, mas sempre que tento compilar o código, recebo uma mensagem de erro.


O compilador MQL afirma : "Undeclared Identifier" (Identificador não declarado) para qualquer uma das enumerações abaixo.


Se eu "comentar" essas enumerações no MQL5, ele funcionará de acordo, o que é interessante, pois isso significa que o código funciona, mas não consegue ler as enumerações, o que eu acho?

Se alguém puder me ajudar, ficarei muito grato :)


Obrigado,

Li que você precisa declarar os enums também no arquivo MQH da mesma forma exata que foram declarados na DLL.

 
Mano parâmetros de entrada e saída de marshalling.

string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects

Como faço para usar isso dentro de OnTimer()?

Estou usando a mesma abordagem explicada no artigo

void OnTimer()
{
   CJAVal data;
   
   for(static int i = 0; i < EventsTotal(); i++)
   {
      data.Deserialize(ReceiveEvent(i));
      Print(data.["id"].ToStr());
        
   }   
}


Minha pergunta é: qual int preciso passar dentro da função ReceiveEvent?
Desculpe minha ignorância, mas não entendi.
 
Olá!!! Esse artigo é muito útil, pois podemos integrar o aplicativo dot net ao MT5/4.
Muito obrigado ao autor.

Não estou acostumado com c#, mas com vb. Tentei criar um formulário com o vb dot net e colocá-lo no terminal MT5, mas não consegui.

Alguém pode me ajudar?
Esse conector é compatível apenas com c#?
Há alguma chance de trabalhar com vb.net?
Agradeço sua ajuda.
Desde já, obrigado.
 

Você pode me dizer o que há de errado com o programa GuiMtController.mq5 que relata um erro ao ser executado?

'GuiMtController.mq5'
Identificador ClickOnElement'-undeclared
1 erros,0 avisos
Arquivos anexados:
k9un.jpg  160 kb