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

 
Según tengo entendido, la plantilla RGiesecke UnmanagedExportLibrary utiliza comentarios como // Código para analizar archivos IL en algunos lugares. Los Windows-ers de habla rusa insertan allí comentarios rusos como // Size, y por eso su plantilla no funciona. Simplemente no hay funciones en la DLL y por eso se lanza el error 127. Es una lástima, por el bien de sólo esta plantilla no quiero cambiar el lenguaje de interfaz de Windows, aunque funciona bastante bien y parece ser correcto, por lo menos las DLL son al menos descargadas. Microsoft también es una escoba, se pueden transferir datos fácilmente de C++ a C#, pero al revés es un gran problema.
 

Estoy en un 64 win 8.

Lo compilé con vs2013.

Sin embargo, se carga, pero hay una llamada a función de importación sin resolver.

Cómo puedo solucionar esto?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) llamada a función de importación no resuelta

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) No se puede encontrar 'Add' en 'Testme.dll'

 

2011.10.29 20:13:37    2000.01.03 00:00  Expert_NN_1_1 USDJPY,H1: cannot call function 'sum' from dll 'NN 1 DLL.dll' (error 127)

Hola,

Estoy recibiendo errores similares. ¿Cómo lo solucionaste?

2014.03.28 22:16:41.199 2014.03.25 23:59 llamada a función de importación no resuelta

2014.03.28 22:16:41.199 2014.03.25 23:59 No se puede encontrar 'Set2DArray' en 'Testme.dll'

 
ANG3110:
Por lo que entiendo la plantilla RGiesecke UnmanagedExportLibrary...

Este mensaje se dejó hace más de medio año. ¿Ha cambiado algo desde entonces????

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
¿Alguien ha conseguido que funcione la función ReplaceString? Todas las funciones funcionan, excepto ésta, ¿alguna idea?
 

Método uno:

Tengo 64 win 7, vs2012 C #. Descargado el archivo de plantilla testme.zip del propietario.

En el medio de la solicitud de unos pocos errores (ruta incorrecta, archivos que faltan, etc y así sucesivamente y así sucesivamente), se ha resuelto.

Pero al final, sigue apareciendo y y arriba el mismo problema. No sé si se resuelve ahora? Que método para solucionarlo.



Método dos:

NuGet instalado el paquete RGiesecke.

https://www.nuget.org/packages/UnmanagedExports/1.2.6

La última versión a partir de 201311 indica

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



Unmanaged Exports (DllExport for .Net)
Unmanaged Exports (DllExport for .Net)
  • www.nuget.org
A set of compile-time libraries (nothing to deploy) and a build task that enable you to export functions from managed code to native applications. That means, you can create plugins in a managed language like C# or F# for native applications that only have a C-Api (like Notepad++). The nuget package is all you need. Just mark your methods with [DllExport] and build for x86, x64 or ia64. Hints: - You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions. - The export name defaults to the method name and the calling convention to stdcall. If that's all what you want, you can just use [DllExport] without parameters. - You cannot put your exports in generic types or export generic methods. (The CLR wouldn't know what type parameters to use)
[Eliminado]  

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 IL método descrito en el artículo, hay una moto más, pero tampoco funciona - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.

Include managed C# DLL into unmanaged C++ DLL - all in one single file
Include managed C# DLL into unmanaged C++ DLL - all in one single file
  • stackoverflow.com
In comparison to the question above i need to combine DLLs so that final mixed DLL could export their functions to other unmanaged applications. For this i would like to compile them both as .netmodule and then combine them into one file with a linker so i have : 1) Libs - project with some library in C# - it does not have any dependencies...
 

Hola,

¿Alguien ha podido enviar una estructura con variables de cadena dentro, a la dll?

He sido capaz de enviar int, double, float, pero para las variables de cadena me sale este error:

Access violation read to 0x0000007B

Aquí está mi estructura C#:

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// public String servidor;
            public int account;
// public String usuario;

            public double balance;
            public Double credit;
// public String moneda;
            public int leverage;
            public int stopout;
            public int stopoutmode;
            public float commission;
            public int lotsize;
            public float minlot;
            public float lotstep;
            public float maxlot;
            public float gmtOffset;

// public String pair;
            public int digits;
            public int point;
            public int tradeAllowed;
            public int swaptype;
            public float swapbuy;
            public float swapsell;
            public int stoplevel;
        };

Y aquí está la estructura mql4:

   struct accInfo
   {
      string   broker;
// servidor de cadenas;
      int      account;
// cadena usuario;
      
      double   balance;
      double   credit;
// moneda de cadena;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// par de cadenas;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

He intentado marshal la variable de cadena dentro de la estructura, pero MT4 se bloquea totaly, no hay error sólo se cuelga y aplasta en las ventanas.

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string broker;
...

Gracias.

Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
  • www.mql5.com
I also provided several examples on how to marshal MQL5 structures against C# and how to invoke exported DLL functions in MQL5 scripts. - Page 2 - Category: articles, library comments
 
Renat Fatkhullin:

Sí, dentro de algún tiempo escribiremos un nuevo artículo sobre el uso de DLLs. Allí se han añadido muchas cosas interesantes.

Mientras tanto, puedes usar los ejemplos del artículo en discusión. No hay nada complicado allí.

Y ... ¿Cuánto tiempo hay que esperar? ¿Un año, dos... ¿o 10?

Ya han pasado 3 años. Según el artículo mencionado al principio no es posible importar métodos desde dll. ¿Dónde están los ejemplos?

 

Muchas gracias por este artículo. He utilizado las ideas aquí para construir esta biblioteca MQL opensource para C#.

https://github.com/jseparovic/MQL4CSharp

Todavía está en desarrollo y no se ha probado en la actualidad, pero las pruebas iniciales muestran que la idea funciona.

Es muy básico en la forma en que envía los comandos de C #, utilizando un hilo para el código de C # para ejecutar, y getters / setters para la comunicación. MQL sondea los comandos de espera cada milisegundo, mientras que el código C# puede bloquear hasta que el resultado se escribe.

Echa un vistazo a https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs para un ejemplo de cómo implementar una estrategia en c#.

Saludos,

Jason