Errores, fallos, preguntas - página 1017
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
En resumen, no se puede definir una implementación de función en .mqh y utilizarla sin problemas en cualquier .ex5
:)
Pero cuando se utiliza un .ex5 para llamar a funciones en otro .ex5, aunque la función con ese nombre exista en ambos, hay que asegurarse de especificar el espacio de nombres con precisión. Es decir, la función ::In() debería, en teoría, resolver el problema. Y si no lo hace, se trata de un error que hay que arreglar.
Dejemos la respuesta del ServiceDesk:
"Al compilar 1.mq5, dentro de la función B() no queda claro a qué función se debe llamar,
importada A() o exportada A() - porque el compilador no entiende que se refería a la misma función"
Son correctos en la forma - pero si quisieras, podrías (y deberías) decirle al compilador que es la misma función, ya que repito el nombre del módulo en el momento de la compilación está disponible (especificado en #import).
Más aún, si primero pones :: en un lugar y compilas, luego borras y pones :: en otro - todo funciona, pero debes estar de acuerdo - es muy incómodo y después de 10-15 permutaciones tan forzadas me cambié a #define
Dejemos la respuesta del ServiceDesk:
"Al compilar 1.mq5, dentro de la función B() no está claro qué función debe llamarse,
Importar A() o exportar A() - ya que el compilador no entiende que se refiere a la misma función"
Son correctos en la forma - pero se podría (y debería) decir al compilador que es la misma función si quisiera, ya que repito el nombre del módulo está disponible en el momento de la compilación (especificado en #import).
Para estas pistas existe un operador de resolución de contexto "::", pero no es aplicable en este caso porque el nombre del módulo (archivo) también es el mismo.
El consejo es adecuado: cambiar la estructura del programa.
Más aún, si primero se pone :: y se compila en un lugar y luego se quita y se pone :: en otro - todo funciona, pero debes estar de acuerdo - es muy incómodo
y después de 10-15 permutaciones forzadas de este tipo cambié a #define
Las definiciones parametrizadas son útiles sólo cuando la detección de tipos no es deseable o cuando los parámetros se sustituyen por trozos de texto "verboso". Como sustituto de una función en línea, una definición es sin duda perjudicial para la salud de un programa.
--
En tu caso me negaría a usar las librerías .ex5, y todo funcionaría bien. El único uso práctico de ellas es en la implementación de la ocultación (al vender), y no veo su uso en otros casos.
¿Escribe para vender?
¿Escribe para vender?
Para mí.
No puedo hacerlo sin .ex5. También tengo funciones como F( string& [] ), de alguna manera no caben en el .dll :)
Tal vez se puedan empujar a través de un separador, pero aún no lo he probado
MQL5 simplemente no tiene funciones inline (en forma) y en su lugar uso macros paramétricas, lo cual no es del todo correcto, porque no hay control de tipo.
Además, el compilador no optimiza las expresiones, por lo que hay una penalización adicional de velocidad. Será mejor que lo compruebes.
Por cierto, sobre el inlining - funciona. Tuve algunos problemas con el depurador debido a ello.
Por cierto, sobre el inlining... funciona. También hubo problemas con el depurador a causa de ello.
Así que funciona a nivel de compilador. Y me gustaría que funcionara a nivel de lenguaje. He dado un ejemplo más arriba - todo funciona a través de inexplicable "eludir el compilador", mientras que el trabajo directo requiere pasos adicionales, a veces significativos, porque como usted sugirió no incluir la descripción y la implementación de una misma función en un solo archivo es ciertamente posible, pero entonces 10 .mqh completos se descomponen en 100 .mqh más pequeños
Todavía no he perseguido la velocidad. Lo principal es la comodidad y que la cantidad de código no crezca exponencialmente.
Incluso me he enfrentado a la necesidad de usar análogos de #if #else en MQL5 (es un poco complicado hasta ahora, pero funciona aquí y allá)
Todavía no busco la velocidad. Lo principal es la comodidad y que el volumen de código no crezca exponencialmente.
A100:
No funciona sin el .ex5. También tengo funciones como F( string& [] ), pero de alguna manera no caben en la .dll :)
....
Caramba... :)
No he sugerido usar DLL en lugar de librerías .ex5. Sólo montones y montones de .mqh y un ejecutable .mq5, nada más.
Sólo montones y montones de .mqh y un ejecutable .mq5, nada más.