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.
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)
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...
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.
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
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#.
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'
Por lo que entiendo la plantilla RGiesecke UnmanagedExportLibrary...
Este mensaje se dejó hace más de medio año. ¿Ha cambiado algo desde entonces????
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
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.
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 0x0000007BAquí está mi estructura C#:
Y aquí está la estructura mql4:
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.
Gracias.
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