Errori, bug, domande - pagina 1970

 
pavlick_:

Ho avuto un errore nel mio script, cercando di localizzarlo, quindi è stato bypassato per ora.

Credo di averla trovata:

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);
         }
         
      }
   }

Allarme:

clr == clrNONE ? false

clrNONE valore = 4294967295

valore restituito = 18446744073709551615

Cioè, impostiamo il colore clrNONE per l'oggetto, poi leggiamo il colore dell'oggetto e lo confrontiamo con clrNONE - non convergono.
 
pavlick_:

Cioè impostare il colore dell'oggetto a clrNONE, poi leggere il colore dell'oggetto

leggere il colore di un altro oggetto
 

Sì, grazie. Ho aggiustato i nomi lì, ma l'errore è ancora lì.

 
pavlick_:

impostare l'oggetto sul colore clrNONE, poi leggere il colore dell'oggetto, confrontarlo con clrNONE - non corrispondono.

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

clrNONE - tutti i bit di 4 byte sono riempiti di uno.

ulong clr - tutti i bit di 8 byte sono riempiti di uno.

 
pavlick_:

Sì, grazie. Ho aggiustato i nomi lì, ma l'errore è ancora lì.

Infatti, in ObjectGetInteger, invece di

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

.

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

soluzione: allora scrivi x al posto di x ovunque.

(color)x
 
fxsaber:

clrNONE - tutti i bit dei 4 byte sono riempiti di uno.

ulong clr - tutti i bit di 8 byte sono riempiti di uno.

Qui c'è una specie di errore, credo.

1. clrNONE è un numero positivo di 4 byte poiché Alert( long(clrNONE) ) == 4294967295 (se fosse negativo (segno di colore), andrebbe in meno)

2. Lo abbiamo convertito in long in SetInteger, il valore non potrebbe cambiare

3. Perché ottengo un numero non primario in SetInteger?

O il colore all'interno del terminale è convertito in un tipo firmato, int per esempio, e poi cresce quando viene convertito in lungo, o qualcos'altro.

 
Ancora una volta, grazie a tutti voi. Sono quasi sicuro che il colore interno è colato per firmare, con una colata inversa e un errore. Bene, sta agli sviluppatori scrivere un ObjectGetInteger() valido, ci vogliono solo pochi caratteri: ObjectGetInteger() { return long((uint)internal_clr); }
 
È un errore (array diversi) 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:
È un errore (array diversi) o no?
No, solo uno 0 finale aggiunto.
 
Комбинатор:
No, aggiunge solo uno 0 finale.

Aggiunta una linea sopra - specificato di copiare la lunghezza della linea. Ha iniziato a corrispondere. Cioè si scopre che il parametro di input count = -1 aggiunge zero alla fine, mentre count = StringLen non aggiunge nulla. Nyuansyk!