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

[Excluído]  

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.

[Excluído]  
new-rena:

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.

.Cfdrewtzu
 
MetaQuotes Software Corp.:

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&nbsp.

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'

Não importa como escrever C # DLL de acordo com o seu método, é inútil, eu usei outro software para testar este método também não é problema, apenas MT4 aqui não pode, você pode enviar uma nova versão um pouco?
 
Renat Fatkhullin:

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?

 
Andy:

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.

 
Konstantin Staryhin:
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));
}
//+------------------------------------------------------------------+

Qual é o erro?

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?
 
Trader Fortis:
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.