Discusión sobre el artículo "Cómo intercambiar datos: Una DLL para MQL5 en 10 minutos."

 

Artículo publicado Cómo intercambiar datos: Una DLL para MQL5 en 10 minutos.:

No hay muchos programadores que recuerden cómo escribir una simple DLL y cuáles son las características especiales de los distintos tipos de vinculación del sistema. Usando varios ejemplos intentaré mostrar todo el proceso de creación de la DLL en 10 minutos, así como discutir algunos aspectos técnicos de nuestra implementación de la vinculación. Mostraré el proceso paso a paso de la creación de la DLL en Visual Studio con ejemplos de intercambio de distintos tipos de variables (números, matrices, strings, etc.). Además, explicaré cómo proteger su terminal de cliente de errores fatales con las DLL personalizadas.

Autor: MetaQuotes Software Corp.

 

Buen artículo, pero plantea algunas grandes preocupaciones.

5. DLL calls wrapper and loss of speed on calls

As already described above, every call of DLL functions is wrapped into a special wrapper in order to ensure safety. 
This binding masks the basic code, replaces the stack, supports stdcall / cdecl agreements and monitors exceptions within the functions called.

This work inevitably leads to delay of the calling function. 
Therefore, it isn't recommended to perform very frequent DLL function calls (hundreds or thousands of times per second) for small operations. 

It' s better to make infrequent calls.

Estoy a favor de añadir proteccion para la aplicacion pero no a expensas del rendimiento. Este es otro cambio desde MT4 ya que las excepciones en dlls causan que MT4 se cuelgue, pero un codigo bien escrito deberia manejar este escenario, preferiria ver articulos sobre escribir codigo seguro en dlls para superar este tipo de problemas. Asi que ahora debido a malos habitos de codificacion todo el mundo tiene que pagar un coste de rendimiento.

Esto es muy, muy malo si usted tiene bibliotecas de algoritmos que se llaman en una base de garrapatas, me atrevería a decir que los hacen inútiles. Teniendo en cuenta muchos de los comentarios que he visto re MT5 no es bueno sobre todo debido a la gente que necesita para reescribir los indicadores, etc esto es sólo otro elemento que causa mucha frustración, y viendo como lo hace el rendimiento de impacto me imagino que otros como yo que el uso extensivo de usuario de DLL se acaba de permanecer con MT4 durante tanto tiempo como sea posible y buscar otra plataforma en la que esto no es un problema.

¿Por qué no podría Metaquotes simplemente añadir un método ligeramente diferente para invocar DLL de una manera segura. El desarrollador podría entonces elegir cargar a través de carga segura o carga de rendimiento y asegurarse de que escriben un buen código que captura las excepciones.

"Es mejor hacer llamadas infrecuentes" Quiero decir en serio ¿qué clase de declaración es que

 

He compilado la dll usando visual c++ express 2008, pero curiosamente terminal no captura la excepción, pero se bloquea dentro de fnReplaceString.

Mi terminal build es 239. ¿Alguna pista?



 
investeo:

He compilado la dll usando visual c++ express 2008 pero curiosamente terminal no captura la excepción, pero se bloquea dentro de fnReplaceString.

Mi terminal build es 239. ¿Alguna pista?

¿Puedes enviarme ex5 y dll?
 
pfx:

Buen artículo, pero plantea algunas grandes preocupaciones.

Estoy a favor de la adición de protección para la aplicación, pero no a expensas del rendimiento. Este es otro cambio de MT4 como excepciones en las DLL causa MT4 a bloquearse, pero el código bien escrito debe manejar este escenario, me gustaría mucho más ver artículos sobre la escritura de código seguro en DLL para superar este tipo de problemas. Así que ahora, debido a los malos hábitos de codificación todo el mundo tiene que pagar un costo de rendimiento.

Esto es muy, muy malo si usted tiene bibliotecas de algoritmos que se llaman en una base de garrapatas, me atrevería a decir que los hacen inútiles. Teniendo en cuenta muchos de los comentarios que he visto re MT5 no es bueno sobre todo debido a la gente que necesita para reescribir los indicadores, etc esto es sólo otro elemento que causa mucha frustración, y viendo como lo hace el rendimiento de impacto me imagino que otros como yo que el uso extensivo de los usuarios de DLL sólo se quedará con MT4 durante tanto tiempo como sea posible y buscar otra plataforma donde esto no es un problema.

¿Por qué no podría Metaquotes simplemente añadir un método ligeramente diferente para invocar DLL de una manera segura. El desarrollador podría entonces elegir cargar a través de carga segura o carga de rendimiento y asegurarse de que escriben un buen código que captura las excepciones.

"Es mejor hacer llamadas infrecuentes" Quiero decir en serio ¿qué clase de declaración es que

No es de extrañar que a esta comunidad le cueste conseguir artículos decentes. Cualquier buen escritor no se molestaría en dedicar tiempo a escribir aquí. ¿Por qué iban a hacerlo? Hacen algo decente como mostrar cómo incorporar dlls y establecer comunicación, y luego llega alguien y los tumba del árbol.

Mira, por lo que puedo ver, hizo un trabajo decente en el artículo, así que tal vez el rendimiento no está donde debería estar. PERO la pregunta o cuestión aquí es, si es tan malo y eres parte de esta comunidad, ¿por qué no intentas codificar una solución a lo que has encontrado como un problema de rendimiento obvio?

Está muy bien que lo menciones, pero a nadie le sirve de nada quejarse de ello si no está dispuesto a presentar soluciones o incluso sugerencias sobre cómo lograr el objetivo.

El artículo exponía riesgos, sí, creo que incluso tenemos una muestra de ello cuando otra persona dice, oye yo lo he descargado y me da este problema, que es exactamente el problema que se trataba en el artículo.Creo que si tuviera que ampliar este articulo, seria como tu dices ahi PFX, mostrar como interactuar de forma segura. Sin embargo, el expuso el riesgo, dejando mucho espacio para que alguien como tu pueda ampliarlo por el concepto mismo del tema de SEGURIDAD.

Una nota personal al autor de mi parte, cuando escriba temas intente abstenerse de términos como novato. Es insultante y degradante, no es una forma profesional de hablar de aquellos que desea que sigan su sabiduría.

 

He estado intentando averiguar con esta funcionalidad de importación de dlls, si podré importar dlls escritos en otros lenguajes como C#. ¿Es esto posible? si no ¿por qué no?

Cual es la diferencia entre una dll de C++ y una dll de C#.

 
ToolMaker:

¿Cuál es la diferencia entre una dll de C++ y una dll de C#?

La principal diferencia es el diseño. El ensamblado c# dll se utiliza para almacenar código gestionado, y c++ dll contiene código nativo.

Pero hay un truco que hace posible la importación de ensamblados: Inverse P/Invoke.

En cuanto a mí, estoy acostumbrado a escribir c++\cli wrapper dll para ese propósito o para escribir todo el código administrado utilizando c++\cli.

 

¿Me puede mostrar la estructura de importación a la biblioteca de C ++?

Trato de añadir este código a MQL5DLLSample.cpp:
------------------------
struct MqlTick

{
INT64 Time;
double Bid;
double Ask;
double Last;
UINT64 Volume;
};

_DLLAPI MqlTick __stdcall MyTick(MqlTick &my)
{
my.Bid = 1;
return(my);
}
------------------------

Luego, añado este código a MQL5DLL Test.mq5 (sección import)

MqlTick MyTick(MqlTick &tick);

y lo llamo en OnTick()

MqlTick tick;
SymbolInfoTick("GBPUSD", tick);
MyTick(tick);
Print("Mi tick: ",tick.bid);
------------------------

La compilación de la librería c++ y del EA se realiza sin errores.

Después de llamar a la functio MyTick(tick) en la terminal obtengo error: MQL5DLL_Test (EURUSD,M1) Violación de acceso escribir en 0x00000008

 

Hola y gracias por este útil artículo.

He intentado crear una pequeña dll para intercambiar datos entre mql5 y mysql.

He seguido los diferentes pasos y he tenido algunos errores.

La dll está en c++

La primera se compiló con minGW

El ex5 no podía abrirla porque no era una dll compilada en 64 bits

Así que compilo con minGW 64 bits

Mi primera dll (que era muy simple) funciona

Hace algunas adiciones etc..

Cuando intento usar la librería mysql, puedo compilar para construir mi dll sin ningún problema

Pero cuando intento abrir el ex5 llamandolo me da el siguiente error:

No se puede abrir C:\user......\DLLNAME.dll (193)

¿Tienes alguna idea para solucionarlo?

Muchas gracias

 

Hola a todos,

¡gran articulo !


pero me preguntaba si alguien me puede ayudar con hacer lo que se describe en este artículo tipo de marcha atrás: obtener datos (garrapatas o datos de barras) en el programa de C ++ de metatrader?

 

He conseguido que esto funcione con un array int estándar, pero ¿es posible pasar un CArrayObj / CArrayDouble en Visual Studio C++?