Discussão do artigo "Expondo código C# para MQL5 usando exportações não gerenciadas" - página 6
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Obrigado, artigo útil!!! Respeito!
Como passar uma string para o C# a partir do MT, não encontrei tal coisa no artigo. Por favor, explique.
Obrigado, artigo útil!!! Respeito!
Como passar uma string para o C# a partir do MT, não encontrei tal coisa no artigo. Por favor, explique.
Novo artigo Expondo código C# para MQL5 usando exportações não gerenciadas foi publicado:
Autor: investeo
Hello investeo, great article!
I've found this article searching on how connect C# DLL on mql5 code... and this helped me a lot! Thanks.
Now, i need to get data from a DLL that runs WebSocket connection with a third party server, and need to send the live data that comes from the server to to MQL5, but i don't found any example of implementation of real time and 2 way communication between MQL5 and a DLL or API.
Can you help me?
Error 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error : syntax error at token '{ ' em: { dllTest
Esse erro ocorre em sistemas chineses porque o UnmanageExports não funciona corretamente porque alguns comentários são gerados em chinês quando o UnmanageExports gera o arquivo IL. Esse problema não ocorre em sistemas operacionais japoneses e ingleses. Há uma solução: você pode mudar seu sistema operacional para um inglês.
Mas isso seria muito trabalhoso, certo? Aqui você precisa tirar a raposinha para resolver o problema!
Faça o download da correção Unmanaged Exports fornecida pela Little Fox no seguinte endereço
https://www.noisyfox.cn/397.html
http://www.magecorn.com/p/280.shtml .
Para obter mais detalhes, leia os dois artigos acima
O proprietário do código acima não conseguiu executá-lo?
2017.04.28 23:48:08.774 Não é possível encontrar 'Add' em 'Testme.dll'
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.
Boa tarde. Aqui é 2018....
Você pode me dizer onde posso ver exemplos de chamadas de funções exportadas escritas em Net?
Você pode usar o C++ stripper com a ajuda do IJW e, em seguida, mesclar tudo em uma única DLL puramente por meio do compilador - linker, perversões com o modelo descrito no artigo não são necessárias, descritas brevemente aqui - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.
Bem, e o método descrito com o modelo RGiesecke é um hack e, mais cedo ou mais tarde, deixa de funcionar, e eu, a propósito, também não funcionei...Mas, se alguém ainda quiser brincar com o método IL descrito no artigo, há outra bicicleta, porém, também não está funcionando - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.
Boa tarde. Você poderia escrever um exemplo de teste passo a passo da criação de c++/c++CLI/c# em um arquivo? Os mesmos exemplos simples do autor do artigo.
Forneça um exemplo simples de uma função escrita em C# para acessá-la a partir do mt4 (ou mt5) ........... Passe os valores a e b para uma função com o Sharp e retorne o resultado para o mt4(mt5)
no artigo https://www.mql5.com/pt/articles/249 a dll compilada do autor funciona corretamente no mt4 e no mt5!
mas quando tento criar minha própria dll compilada a partir dos códigos-fonte do autor (no VisualStudio 2010), essa dll não funciona (escreve o erro 127)
todas as versões do .NET estão instaladas.
// код C#
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace TEST
{
class TEST
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
namespace RGiesecke.DllExport
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}
// код МТ4
//+------------------------------------------------------------------+
#import "TEST.dll"
int Add(int a,int b);
#import
void start()
{
Comment(Add(3,2));
}
//+------------------------------------------------------------------+
Passei três dias e três noites pesquisando e experimentando, em geral o exemplo funciona no VS2017, consegui compilar e executar a .dll no MT4, mas ..... no Win10 em russo, não consegui executá-lo.
Fiz o seguinte: instalei uma máquina virtual com Win7 - 64, mas em inglês, instalei a versão em inglês do VS2017, instalei apenas o pacote para C#, copiei o modelo do RGiesecke para a pasta com modelos VS2017. Ao compilar o projeto, não se esqueça de verificar a plataforma - necessariamente x86 (para MT4). Durante a primeira compilação, recebi um erro de ausência de namespace RGiesecke, instalei o pacote UnmanagedExportsdo projeto. Tudo foi compilado com um erro - ildasm.exe não encontrado, mas o .dll funciona no MT4 sem problemas.
O problema provavelmente está no modelo do RGiesecke, ele funciona corretamente na versão em inglês do Win, na versão em inglês do VS2017 e todos os caminhos no VS2017 devem ser definidos por padrão.
É assim que funciona ;)
Essa abordagem funciona para a versão 5 do .NET?
Não a testei, mas duvido que funcione
O MT4 é muito difícil de interagir com o C# - sempre há algumas armadilhas.
É mais fácil mudar para o MT5.
Mas se você quiser usar o MT4 em princípio, então, como opção, inicie o .dll em C# de acordo com a metodologia do artigo e, nele, inicie qualquer código C# em um thread separado e organize a troca.