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
El autor del artículo está muy agradecido por una presentación tan accesible de la información sobre la interoperabilidad IPC sin dlls bicicleta.
Trabajar con la memoria me parece bastante complicado, pero el enfoque es claro, excepto algunas preguntas, espero que la gente con conocimientos ayudará a entender:
1. Con la ayuda de memcpy copiamos una variable short de dos bytes en el array uchar[2], ¿cómo se introduce la información en el propio array?
¿Qué formato tendrán los valores en los índices 0 y 1 del array uchar?
El valor se divide byte a byte y se escribe en el array, ok ... Creo que entiendo aquí.
No puedo entender que valores caen en este array y como obtener el valor original de ellos, la cuestión no es que no pueda mostrar estos valores en pantalla.
2. Como llenar correctamente el array uchar[4] con valores de diferentes tipos al copiar memcpy, por ejemplo:
Parece que la respuesta es trivial y todo se hace simplemente, pero ¿cómo escribirlo correctamente ?
¿Ha probadoPrint?
El cuarto ejemplo da error : 'operator=' - operación ilegal usar SAMPLE_04.mq4 34 7
#property copyright ""
#property link ""
#property version ""
#property strict
//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
double d; // 8 байт
long l; // 8 байт
int i[3]; // 3 * 4 = 12 байт
};
//---
struct str2
{
uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
str1 src; //
src.d = -1; //
src.l = 20; //
//--- заполняем параметры структуры
ArrayInitialize(src.i, 0);
str2 dst; //
//--- превратили структуру в байтовый массив
dst = src; // <----- Ошибка
}
Entiendo la idea sobre la sección de memoria, pero ¿quizás las definiciones no son del todo correctas?
¿Puedes decirme cuál es la razón?
Gracias de antemano.La idea de una posición de memoria está clara, pero ¿quizá hay algo mal en las definiciones?
¿Cuál es la razón?
Las estructuras de diferentes tipos ya no se pueden copiar, MQL ha eliminado esta posibilidad.
uso de la unión
uchar es incorrecto por cierto, y hay doble es también sospechosamente presente allí.
Y por cierto src debería especificar que es exactamente lo que le pertenece y será pasado.
Alguien ya te ha corregido tal y como sugeriste. Bien. Piensa. Buena suerte.
¿funcionará para mql4 hoy?
Los lenguajes (MQL4 / MQL5) son completamente iguales ahora - la diferencia está en 2-3 funciones que faltan en MQL4(ArrayPrint y algo más pequeño) y en "nuevas características" para MQL5 - base de datos, DirectX y OpenCL.
pero el artículo fue escrito hace 8 años, ahora MQL se ha convertido en un lenguaje estrictamente tipado, y para asignar 2 estructuras (ejemplo en el artículo) es necesario escribir un constructor de copia o serializar la estructura en una matriz de bytes y luego de vuelta otra vez.
Asignar structs de diferentes tipos ya no funciona( no se permite la conversión de parámetros - se espera una variable del mismo tipo).
Pero sería posible trabajar con uniones: