Discussão do artigo "Expondo código C# para MQL5 usando exportações não gerenciadas" - página 4

 
MetaDriver:

Há um mês venho sugerindo timidamente que deveríamos criar um wiki-tutorial sobre o mql5, preenchido pela comunidade, o que resolveria os problemas do mega-tutorial. Os autores poderiam até ser recompensados com créditos por artigos especialmente visitados.

O mecanismo wiki é gratuito e está disponível.

// Se o Metaquotes não quiser fazer isso, alguém poderá fazê-lo em um site externo. Eu, por exemplo, estou pensando nisso.

Para sites externos, há um problema - temos direitos autorais sobre nosso material. E ao criar um wiki externo, quase 100% do texto será um copypaste de nossos materiais.

Pode-se argumentar que os wikis públicos são uma utopia. A ideia de wikis públicas está enterrada na prática há muito tempo. Veja quanto esforço dedicamos ao desenvolvimento de nossas comunidades e documentação. É muito dinheiro e trabalho diário.

A solução para o problema está na área de criação de conteúdo gerenciado com fornecimento obrigatório para o terminal de cada usuário. Isso aumenta a eficiência da familiarização em massa de um insignificante 0,00x% para um muito realista 3-5%.

Aumentamos o volume e a conectividade dos materiais MQL5 diariamente. O projeto de documentação(linguagem MQL5, ajuda, multilíngue) tem uma participação muito grande em nosso trabalho.

 
Renat:

Para sites externos, há um problema: temos direitos autorais sobre nossos materiais. E ao criar um wiki externo, quase 100% do texto será copiado de nossos materiais.

Pode-se argumentar que os wikis públicos são uma utopia. A ideia de wikis públicos está enterrada na prática há muito tempo. Veja quanto esforço dedicamos ao desenvolvimento de nossas comunidades e documentação. É muito dinheiro e trabalho diário.

A solução para o problema está na área de criação de conteúdo gerenciado com fornecimento obrigatório para o terminal de cada usuário. Isso aumenta a eficiência da familiarização em massa de um insignificante 0,00x% para um muito realista 3-5%.

Aumentamos o volume e a conectividade dos materiais MQL5 diariamente. O projeto de documentação(linguagem MQL5, ajuda, multilíngue) tem uma participação muito grande em nosso trabalho.

E se revivermos os concursos no âmbito do tutorial? Afinal, os novatos estão pedindo um livro-texto.

Faça um concurso de várias etapas, os participantes se registram, enviam um plano de livro-texto, 50% são eliminados, os demais recebem US$ 20 cada, passam para a segunda etapa etc.

Até o final da maratona, chegarão ao final poucos, mas com os melhores trabalhos. Estabeleça prazos reais de criação com meio ano, divida-os em etapas e tudo dará certo.

 

Esse é um artigo muito interessante e útil sobre a interoperabilidade geral entre C++ e .NET.

A estratégia mais simples de implementar é a "2.4. Classe envolvente de C++/Cli", porque você pode usar a API do .NET em C++/cli sem problemas, de modo que o único código de cola é uma classe pequena e direta que contém "gcroot".

Essa abordagem foi escolhida como base para a implementação de http://www.nquotes.net, uma biblioteca que permite a programação MQL em C#.

Embora a primeira versão seja compatível apenas com MQL4, ela será definitivamente portada para MQL5 em versões futuras.

NQuotes : MetaTrader (MT4) and C#/.NET bridge
  • www.nquotes.net
Debugging in Visual Studio IDE is possible. You can inspect values, place breakpoints and inspect execution step by step. Have a nicer experience than "Print" debugging in pure MQL. Compatible API NQuotes has an API that is compatible with MQL. It is quite easy to get started for MQL4 developers, while others can use the official...
 

Ótimo artigo, muito, muito útil. Mas...

Tenho um pequeno problema com o Visual Studio. Se eu criar um novo projeto usando o modelo e construí-lo, o VS não terá problemas. Posso então salvar o novo projeto (incluindo a dll criada) no disco, em uma pasta de solução. A dll é executada sem problemas. No entanto, se eu voltar ao projeto salvo no VS, ele reclamará que o projeto "RGiescke.DllExport.targets" não foi encontrado ou não está no disco, embora o arquivo esteja lá.

Acho que é um problema com o arquivo de projeto.....

 

Muito bom o tutorial, gostei dele.

Muito obrigado.

[Excluído]  

Oi Investeo,

Obrigado por esse artigo, ele foi muito útil, mas parece que enfrentei um problema ao tentar usar o modelo do RGiesecke.

Quando criei e construí uma DLL, usei o DLL Export Viewer para verificar os nomes das funções exportadas para poder localizá-las e chamá-las por meio de GetProcAddress. Infelizmente, a própria DLL está carregando bem na função LoadLibrary, mas GetProcAddress retorna o erro 127 - Function not found (Função não encontrada). Ao mesmo tempo, o DLL Export Viewer mostra que nenhuma das minhas funções foi exportada...

Você poderia sugerir o que pode estar errado no meu código?

using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    public class Class1
    {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

        [DllExport("Demo", CallingConvention = CallingConvention.StdCall)]
        public static void Demo()
        {
            MessageBox(new IntPtr(0), "Demo", "Demo", 0);
        } 
    }
}

E no aplicativo Win 32 Console, estou fazendo o seguinte:

HMODULE x1 = LoadLibrary(L"ClassLibrary1.dll");

        if (!x1) 
        {
                MessageBox(0, L"ERROR", L"Library", 0);
                return 0;
        }

        FARPROC x2 = GetProcAddress(x1, "Demo");

        DWORD error = GetLastError();

        if (!x2) 
        {
                MessageBox(0, L"ERROR", L"Proc", 0);
                return 0;
        }

Obrigado, Art

 
Renat:

A propósito, o MetaTrader 5 tem sido capaz de importar nativamente funções de DLLs escritas em .NET há várias compilações

Adicionamos especialmente esse suporte e agora não há necessidade de usar soluções alternativas.

Não encontrei informações sobre como importar funções .Net. Quem puder, por favor, compartilhe um link ou um exemplo simples.
 
a.p:
Não consigo encontrar informações sobre como fazer com que a função .Net seja improvisada. Quem puder, por favor, compartilhe um link ou um exemplo simples.

Ative a opção "Mostrar todos os tipos de arquivo" no navegador do editor, pegue sua DLL com o mouse e jogue-a na janela MQL5 do programa.

Você provavelmente ficará surpreso com o resultado.

Документация по MQL5: Программы MQL5
Документация по MQL5: Программы MQL5
  • www.mql5.com
Программы MQL5 - Документация по MQL5
 
Renat:

Ative a opção "Show all file types" (Mostrar todos os tipos de arquivo) no navegador do editor, pegue sua DLL com o mouse e jogue-a na janela MQL5 do programa.

Você provavelmente ficará surpreso com o resultado.

legal.

Se eu pudesse inserir todas as funções da DLL de uma só vez.

 
Renat:

Ative a opção "Show all file types" (Mostrar todos os tipos de arquivo) no navegador do editor, pegue sua DLL com o mouse e jogue-a na janela MQL5 do programa.

Você provavelmente ficará surpreso com o resultado.

Tentei, o MetaEditor trava

P.S.
Win8 Enterprise 64
MetaEditor build 842
.Net lib tem uma função:
public static int Add(int value1, int value2)
{
return value1 + value2;
}