Errores, fallos, preguntas - página 1970

 
pavlick_:

Tengo un error en mi script, tratando de localizarlo, por lo que se pasa por alto por ahora.

Creo que lo he encontrado:

if(sizeof(color) <= sizeof(ulong))
   {
      
      if( ObjectCreate(0, "any_object", OBJ_TREND, 0, 0, 0)  &&
          ObjectSetInteger(0, "any_object", OBJPROP_COLOR, clrNONE) )
      {
         ulong clr;
         if( ObjectGetInteger(0, "any_object", OBJPROP_COLOR, 0, clr) )
         {
            Alert("clr == clrNONE ?  ", clr == (ulong)clrNONE);
            Alert("clrNONE value = ", (ulong)clrNONE);
            Alert("value that was returned = ", clr);
         }
         
      }
   }

Alerta:

clr == clrNONE ? false

clrNONE valor = 4294967295

valor devuelto = 18446744073709551615

Es decir, establecemos el color clrNONE para el objeto, luego leemos el color del objeto y lo comparamos con clrNONE - no convergen.
 
pavlick_:

Es decir, establecer el color del objeto en clrNONE, y luego leer el color del objeto

leer el color de otro objeto
 

Sí, gracias. He arreglado los nombres ahí, pero el error sigue ahí.

 
pavlick_:

poner el objeto en color clrNONE, luego leer el color del objeto, compararlo con clrNONE - no coinciden.

Alert("clr == clrNONE ?  ", (color)clr == clrNONE); // true

clrNONE - todos los bits de 4 bytes se llenan con unos.

ulong clr - todos los bits de 8 bytes se llenan con unos.

 
pavlick_:

Sí, gracias. He arreglado los nombres ahí, pero el error sigue ahí.

De hecho, en ObjectGetInteger, en lugar de

void ObjectGetInteger( long& x ) { x = clrNONE; }

va

void ObjectGetInteger( long& x ) { x = -1; }

solución: entonces escribe x en lugar de x en todas partes.

(color)x
 
fxsaber:

clrNONE - todos los bits de los 4 bytes se llenan con unos.

ulong clr - todos los bits de 8 bytes se llenan con unos.

Creo que aquí hay algún tipo de error.

1. clrNONE es un número positivo de 4 bytes ya que Alert( long(clrNONE) ) == 4294967295 (si fuera negativo (signo de color), iría a menos)

2. Lo convertimos a long en SetInteger, el valor no podía cambiar

3. ¿Por qué obtengo un número no primario en SetInteger?

O bien el color dentro del terminal se convierte a un tipo con signo, int por ejemplo, y luego crece cuando se convierte a lo largo, o algo más.

 
Una vez más, muchas gracias a todos. Estoy casi seguro de que el color interior está fundido a la firma, con fundición inversa y error. Bueno, es cosa de los desarrolladores escribir un ObjectGetInteger() válido, sólo se necesitan unos pocos caracteres: ObjectGetInteger() { return long((uint)internal_clr); }
 
¿Se trata de un error (arrays diferentes) o no?
void OnStart()
{
  short Data[] = {1};
  short Data2[];
  
  StringToShortArray(ShortArrayToString(Data), Data2);
//  StringToShortArray(ShortArrayToString(Data), Data2, 0, ArraySize(Data)); // так массивы совпадут
  
  ArrayPrint(Data);  // 1
  ArrayPrint(Data2); // 1 0
}
 
fxsaber:
¿Se trata de un error (arrays diferentes) o no?
no, sólo un 0 final añadido.
 
Комбинатор:
No, sólo añade un 0 final.

Se ha añadido una línea superior - especificada para copiar la longitud de la línea. Empezó a coincidir. Es decir, resulta que el parámetro de entrada count = -1 añade cero al final, mientras que count = StringLen no añade nada. ¡Nyuansyk!