Discusión sobre el artículo "Exponer código C# a MQL5 usando exportaciones no gestionadas" - página 6

[Eliminado]  

Gracias, ¡¡¡útil artículo!!! ¡Respeto!

Como pasar una cadena a C# desde MT, no encontre tal cosa en el articulo. Por favor explicame.

[Eliminado]  
new-rena:

Gracias, ¡¡¡útil artículo!!! ¡Respeto!

Como pasar una cadena a C# desde MT, no encontre tal cosa en el articulo. Por favor explicame.

.Cfdrewtzu
 
MetaQuotes Software Corp.:

Nuevo artículo Exposing C# code to MQL5 using unmanaged exports ha sido publicado:

Autor: investeo

¡Hola investeo, muy buen articulo!

He encontrado este articulo buscando sobre como conectar DLL de C# en codigo mql5... ¡y esto me ayudó mucho! Gracias.

Ahora, necesito obtener datos de una DLL que ejecuta una conexión WebSocket con un servidor de terceros, y necesito enviar los datos en vivo que vienen del servidor a MQL5, pero no he encontrado ningún ejemplo de implementación de tiempo real y comunicación bidireccional entre MQL5 y una DLL o API.

¿Pueden ayudarme?

 

Error 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error : syntax error at token '{ ' en: { dllTest

Este error se produce en sistemas chinos porque UnmanageExports no funciona correctamente porque algunos comentarios se generan en chino cuando UnmanageExports genera el archivo IL. Este problema no ocurre en sistemas operativos japoneses e ingleses, hay una solución, puedes cambiar tu sistema operativo a uno inglés.

Pero esto sería demasiado problema, cierto, ¡aquí necesitas sacar la cosita del zorro para arreglarlo!

Descarga el Unmanaged Exports fix proporcionado por Little Fox en la siguiente dirección

https://www.noisyfox.cn/397.html

http://www.magecorn.com/p/280.shtml&nbsp.

Para más detalles, lee los dos artículos anteriores

 

El propietario del código anterior ¿cómo no ha sido capaz de ejecutarlo?

2017.04.28 23:48:08.774 No se puede encontrar 'Add' en 'Testme.dll'

No importa cómo escribir C # DLL de acuerdo con su método, es inútil, he utilizado otro software para probar este método es también no hay problema, sólo MT4 aquí no puede, puede enviar una nueva una pequeña versión?
 
Renat Fatkhullin:

Activa "Mostrar todos los tipos de archivo" en el navegador del editor, coge tu DLL con el ratón y lánzala a la ventana MQL5 del programa.

Seguramente te sorprenderá el resultado.

Buenas tardes. Es 2018....

Me puedes decir dónde puedo ver ejemplos de llamada a funciones exportadas escritas en Net?

 
Andy:

Puede utilizar C ++ stripper con la ayuda de IJW, y luego fusionar todo en una sola DLL puramente por medio de compilador - enlazador, perversiones con la plantilla descrita en el artículo no es necesario, se describe brevemente aquí - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.

Bueno, y el método descrito con la plantilla RGiesecke - es un hack y tal, tarde o temprano deja de funcionar, yo, por cierto, tampoco funcionó ...

Pero, si alguien todavía quiere jugar con el método IL se describe en el artículo, hay otra moto, sin embargo, también no funciona - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.

Buenas tardes. ¿Podría escribir un ejemplo de prueba paso a paso de la construcción de c++/c++CLI/c# en un archivo? Los mismos ejemplos simples que el autor del artículo.

 
Konstantin Staryhin:
Por favor, proporcione un ejemplo sencillo de una función escrita en C# para acceder a ella desde mt4(o mt5) ........... Pasar valores a y b a una función con Sharp y devolver el resultado a mt4(mt5)

en el artículo https://www.mql5.com/es/articles/249 la dll compilada del autor funciona en mt4 y mt5 ¡correctamente!

pero cuando intento crear mi propia dll compilada a partir de las fuentes del autor (en VisualStudio 2010) esta dll no funciona (escribe error 127)

todas las versiones .NET están 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));
}
//+------------------------------------------------------------------+

¿Cuál es el error?

Pasé tres días y tres noches googleando y experimentando, en general, el ejemplo funciona en VS2017, me las arreglé para compilar y ejecutar .dll bajo MT4, pero ..... bajo Win10 en ruso no pude ejecutarlo.

Hice lo siguiente: instalé una máquina virtual con Win7 - 64, pero en inglés, instalé la versión en inglés de VS2017, instalé sólo el paquete para C#, copié la plantilla de RGiesecke a la carpeta con plantillas VS2017. Al compilar el proyecto, no se olvide de comprobar la plataforma - necesariamente x86 (para MT4) . Durante la primera compilación me dio un error no namespace RGiesecke, he instalado el paquete UnmanagedExportsdel proyecto. Todo compilado con 1 error - ildasm.exe no encontrado, pero .dll funciona bajo MT4 sin problemas.

Probablemente el problema está en la plantilla de RGiesecke, funciona correctamente en la versión inglesa de Win, en la versión inglesa de VS2017 y todas las rutas en VS2017 deberían estar configuradas por defecto.

asi es como funciona ;)

 
¿Funciona este enfoque para la versión 5 de .NET?
 
Trader Fortis:
¿Funciona este método para la versión 5 de .NET?

No lo he probado, pero dudo que funcione

MT4 es muy difícil de interactuar con C# - siempre hay algunas trampas.

Es más fácil cambiar a MT5.

pero si quieres usar MT4 en principio, entonces como una opción - lanzar .dll en C# de acuerdo con la metodología del artículo, y en él lanzar cualquier código C# en un hilo separado y organizar el intercambio, he lanzado bibliotecas C# de 64 bits de esta manera