Discusión sobre "Cómo escribir una DLL para MQL5 e intercambiar datos en 10 minutos". - página 4

 
¿Qué es este mensaje que estoy recibiendo "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violación de acceso escribir a 0x00000000 en 'D:\ft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. La llamada a la dll está permitida.
 
joo:
¿Qué es este mensaje que estoy recibiendo "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violación de acceso escribir a 0x00000000 en 'D:\ft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. La llamada a la dll está habilitada.

Ejemplo de demostración del artículo:

4. Captura de excepciones en funciones DLL

Para evitar el bloqueo del propio terminal, cada llamada a una función de la DLL se protege automáticamente con una envoltura de Excepción No Manipulada. Este mecanismo evita la mayoría de los errores estándar (invocación de memoria inaccesible, división por cero, etc.).

Para comprobar la operatividad de este mecanismo vamos a crear el siguiente código:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

y llamarlo desde la terminal:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

Como resultado habrá un intento de escribir en una dirección cero con una excepción generada. El terminal lo interceptará, informará en el registro y continuará su trabajo:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
Del artículo un ejemplo de demostración:

Gracias. Así que no estuve muy atento cuando leí el artículo. :)

PS Podría haber dicho algo como: "¡Escucha, camarada! Vuelva a leer el artículo", y tendrá razón. Respeto y respeto, como se dice.

 
Renat:

Querida pisara,

Seamos claros: estamos discutiendo entre un teórico y un profesional.
Sin entrar en lo personal, al grano. Un buen teórico se basa en la experiencia práctica, un buen profesional mide siete veces.

Por supuesto, nadie te prohíbe luchar por la "paz mundial", pero ten en cuenta más factores que "¿por qué no mejorar?

Eso es lo que escribí: no lo usarás, porque no quieres hacer el trabajo rutinario. Tendrán que ponérselo todo en bandeja de plata: todos los indicadores, todo el entorno del mercado, toda la historia en diferentes periodos, etc. Y necesitas hacer gráficos, porque no vas a manipular todos los indicadores en tu mente.

Así que, en realidad, necesitas un terminal completo. Y te lo damos: MetaTrader 5 + MQL5 + DLL. Llámalo framework o simplemente dinos - danos el terminal en código fuente/componentes (porque esto es lo que estás demandando).

No se trata de hacer la paz, pero hay que convenir en que hacer la vida más fácil al programador y mejorar la calidad del sistema de comercio + sus capacidades de integración no ha perjudicado a nadie todavía. Ejemplos no muy lejanos: Borland Delphi, MS .net tienen un framework / base de componentes / diagramas de clase totalmente abiertos e incluso una parte importante del código fuente (Delphi) para los usuarios de la plataforma.

Los programadores consideran erróneamente que es "poderoso" poder escribir scripts para sistemas de comercio en lenguajes nativos no protegidos, y luego se sorprenden de que nadie vaya a utilizar sus creaciones. Por eso mueren antes de nacer. Los que desarrollaron y crearon una comunidad de usuarios piensan mucho más profundamente (porque recibieron los golpes antes) y no cometen esos errores.
Seamos realistas. Si quiere lanzar un software y venderlo, en seis meses o un año lanzar una actualización de pago, entonces la protección del código es muy importante para usted. Si ustedes, según entiendo, están aquí a largo plazo y mejoran continuamente la plataforma con una cadena de construcciones y soporte, entonces ningún competidor los atrapará. Pero los usuarios podrán escribir un código mucho mejor. Y no sólo el código, sino también la estructura de TC, que no es menos importante! Incluso puedo traer una analogía con los antivirus - hackear el cliente AV todavía no da acceso a la actualización de la base de datos de virus (aquí - cuotas).

La llamada controlada (desactivada por defecto) de DLL es aceptable, pero la descarga de DLLs hechas por alguien a su terminal de comercio es un agujero peor que un Internet Explorer 6 sin parchear.
¡Así que este agujero es sólo un permiso del usuario! ¿Cómo puede un mal usuario garantizar al 100% la ausencia de DLL dañinas, aunque estén firmadas por la empresa X? Al fin y al cabo, si lo prohibía con dudas, nunca sabría si le sería útil o no. Así que aquí tenemos algo de psicología.


Para su información, las estadísticas de Google Trends sobre terminales de comercio con automatización:

Me pregunto si la escala de ordenadas es logarítmica.
Por cierto, los datos rusos son interesantes y podemos ver que el Metastock rojo está a la cabeza:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Utilice las funciones normales de "Responder", por favor. Es muy incómodo de leer.

Para dividir un bloque citado, coloque el cursor en el lugar que desee y seleccione el estilo "Texto sin formato" o pulse Ctrl+1.


En general, le recomiendo que deje de dar este tipo de consejos: son fundamentalmente mortales, se basan en supuestos erróneos y no son adecuados para el lenguaje aplicado.

Como broma, hay un viejo chiste:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Un transeúnte se acerca a un judío, le echa un rublo y le dice:

- Escucha, cambia el cartel, si no te quedarás con hambre.

Cuando el transeúnte se fue, el judío se dirigió a su vecino y le dijo

- ¿Lo entiendes, Izya? ¡Este hombre nos va a enseñar sobre el comercio!

 
Renat:

Utilice las funciones normales de "Responder", por favor. Es muy incómodo de leer.

Para romper un bloque citado, sitúe el cursor en el lugar adecuado y seleccione el estilo "Texto sin formato" o pulse Ctrl+1.


En general, recomiendo acabar con este tipo de consejos: son fundamentalmente asesinos, se basan en una premisa equivocada y no son adecuados para un lenguaje aplicado.

Como broma, hay un viejo chiste:


Vale, si no quieres dar las verdaderas razones por las que la premisa es asesina y por las que el framework .net te resulta escueto, se acabó la discusión. Respecto a la broma, mide por ti mismo, el monasterio es tuyo.

Queda desear a todo el mundo que no mire hacia atrás después de actualizar a la 5.

 
Renat, ¡muchas gracias por el artículo! Es muy interesante e informativo. Lamentablemente, no he conseguido utilizar el script MQL5DLL Test.mq5. Hice todo como se describe en el artículo. Sin embargo, cuando ejecuté el script, MT5 simplemente se cayó. No sé cuál es el problema. ¿Puede ser la cuestión del eje? Estoy ejecutando MS Vista x64. Por favor, aconseja cómo solucionarlo :-)
 
denkir:
Renat, ¡muchas gracias por el artículo! Es muy interesante e informativo. Lamentablemente, no he conseguido utilizar el script MQL5DLL Test.mq5. Hice todo como se describe en el artículo. Sin embargo, cuando ejecuté el script, MT5 simplemente se cayó. No sé cuál es el problema. ¿Puede ser la cuestión del eje? Estoy ejecutando MS Vista x64. Por favor, aconseja cómo solucionarlo :-)

Vuelve a leer el artículo completo, por favor.

Sólo hay un lugar sobre la generación de errores (escritura en direcciones cero) dentro de la DLL, y la posterior captura de errores por parte del terminal sin que se caiga. Es necesario comentar la llamada del método fnCrashTest.

Hoy voy a comprobar este código en Vista x64 - puede ser que sea nuestro error.

 
Renat писал(а) :

Vuelve a leer el artículo completo, por favor.

Sólo hay un lugar sobre la generación de errores (escritura en direcciones cero) dentro de la DLL y la posterior captura de este error por el terminal sin accidente. Debe comentar la llamada del método fnCrashTest.

Hoy voy a comprobar este código en Vista x64 - puede ser que sea nuestro error.

Sí, he leído todo con atención y más de una vez :-))

Se me olvidó decir que comenté la función fnCrashTest(int arr) en el script MQL5DLL Test.mq5. Todavía tengo un choque. :-(

Esto es lo que parece. ¿O tengo que comentar la función fnCrashTest(int arr) en el código de la dll?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) ¿qué versión del terminal es de 32 o 64 bits?

2) ¿qué versión de dll es de 32 o 64 bits?

Razón de la queja: